1.概念
所谓的成员变量,是指在类中(不是方法或其他代码块)直接定义的变量。根据是否带有static关键字,成员变量又分为静态变量(类变量)、实例变量(对象变量)。成员变量在整个类的内部都有效,可以在当前类的任何方法中使用。另外如果成员变量不是被private修饰的,还可以在其他的类中引用。
2. 实例变量
实例变量也被成为对象变量,是指在类中定义的非static变量。实例变量具有如下特点:
● 实例变量声明在一个类中,但在方法、构造方法和语句块的外面;
● 当一个对象被实例化之后,每个实例变量的值也就跟着确定了;
● 实例变量在对象创建时创建,在对象被销毁时销毁;
● 实例变量对于类中的方法、构造方法或者语句块都是可见的。一般情况下我们应该把实例变量设为私有,通过访问修饰符可以使实例变量对子类也可见;
● 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
● 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,应该使用完全限定名:ObjectReference.VariableName。
3. 静态变量
静态变量又被称为类变量,是被static修饰的、直接定义在类中(方法之外)的变量,它具有如下特点:
● 静态变量可以被public、private、final和static修饰;
● 静态变量在方法外面定义,但可以在静态语句块中初始化,且初始化后不可被改变;
● 静态变量与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量都声明为public类型;
● 静态变量的默认值和实例变量相似;
● 静态变量通过ClassName.VariableName的形式进行访问;
● 静态变量存储在静态存储区;
● 静态变量在第一次被访问时创建,在程序结束时销毁;
● 无论在一个类中创建了多少个对象,一个类都只拥有类变量的一份拷贝;
● 静态变量被声明为public static final类型时,变量名称一般建议使用大写字母。
4. 权限修饰符
大家要注意,成员变量的作用域,是可以通过权限修饰符来进行修改的。也就是说,我们可以给一个成员变量不同的修饰符,赋予该变量不同的权限。比如,我们可以给一个人身上赋予不同的”角色标签“,就可以改变这个人的”权力大小“。在Java中,有如下4个权限修饰符:
1. private私有的修饰符:可以修饰成员变量、成员方法、构造方法,但不能修饰类(内部类除外)。被private修饰的成员只能在被修饰的本类中访问,在其他类中不能调用。一般被private修饰的成员变量,是通过公开的set和get方法向外界提供访问方式。
2. defalut默认的修饰符:不用写任何关键字,它可以修饰类、成员变量、成员方法、构造方法。变量被默认权限修饰后,只能被本类以及同一个包下的其他类访问。
3. protected受保护的修饰符:可以修饰成员变量、成员方法、构造方法,但不能修饰类(内部类除外)。成员变量被protected修饰后,可以在同一类内部,和同一包中的其他类访问。如果不同包中的类想要访问被protected修饰的成员,这个类必须是其子类。
4. public公开的修饰符:是权限最大的修饰符,可以修饰类、成员变量、成员方法、构造方法。成员变量被public修饰后,可以在任何一个类中任意使用,不管是否是同一个包。
5. 案例
在下面的案例中,壹哥定义了2个成员变量供大家参考:
public class Demo01 {
private int age = 18;//实例变量、对象变量,在当前的Demo01类内部有效
public static String msg = "Hello,一一哥";//静态变量、类变量,因为是public公开的,在当前Demo01类内部,及其他类中都可以使用
public static void main(String[] args) {
//注意:在static静态方法中不能引用非静态变量
//System.out.println("age=" + age);
System.out.println("msg=" + msg);
}
}