类变量与实例变量
1.位置
类变量与实例变量都独立于方法之外,但是前者有static关键字修饰。
public class Variable {
static int num1 = 0; //类变量
private int num2 = 0; //实例变量
}
2.默认值
两者都有默认值,变量的值可以在声明时指定,也可以在构造方法中指定。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。
public static void main(String[] args) {
System.out.println(Variable.num1);
Variable v1= new Variable();
System.out.println(v1.num2);
}
//运行结果:0 0
3.类变量是所有对象共有。一个对象改变变量值,其他对象再调用该变量得到的就是改变后的结果;
public static void main(String[] args) {
Variable v1= new Variable();
Variable v2= new Variable();
v1.num1 = 1;
System.out.println(v2.num1);
}
//运行结果:1
实例变量是对象私有。一个对象改变变量值,不影响其他对象。
public static void main(String[] args) {
Variable v1= new Variable();
Variable v2= new Variable();
v2.num2 = 1;
System.out.println(v1.num2);
}
//运行结果:0
4.空间分配问题
类变量属于类,程序加载类的字节码时就会自动为静态变量分配空间。类变量不需要创建对象,就可以直接通过使用类名来引用。
public static void main(String[] args) {
System.out.println(Variable.num1);
}
//运行结果:0
实例变量在创建对象时,才会被分配空间,才能够使用。
public static void main(String[] args) {
System.out.println(Variable.num2);
//报错:Cannot make a static reference to the non-static field Variable.num2
Variable v1= new Variable();
System.out.println(v1.num2);
//运行结果:0
}