共计 1729 个字符,预计需要花费 5 分钟才能阅读完成。
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 个权限修饰符:
- private 公有的修饰符:能够润饰成员变量、成员办法、构造方法,但不能润饰类(外部类除外)。被 private 润饰的成员只能在被润饰的本类中拜访,在其余类中不能调用。个别被 private 润饰的成员变量,是通过公开的 set 和 get 办法向外界提供拜访形式。
- defalut 默认的修饰符:不必写任何关键字,它能够润饰类、成员变量、成员办法、构造方法。变量被默认权限润饰后,只能被本类以及同一个包下的其余类拜访。
- protected 受爱护的修饰符:能够润饰成员变量、成员办法、构造方法,但不能润饰类(外部类除外)。成员变量被 protected 润饰后,能够在同一类外部,和同一包中的其余类拜访。如果不同包中的类想要拜访被 protected 润饰的成员,这个类必须是其子类。
- public 公开的修饰符:是权限最大的修饰符,能够润饰类、成员变量、成员办法、构造方法。成员变量被 public 润饰后,能够在任何一个类中任意应用,不论是否是同一个包。
- 案例
在上面的案例中,壹哥定义了 2 个成员变量供大家参考:
<code class="language-plaintext hljs">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);
}
}
</code>