我们都知道 无论一个类生成了多少个对象 所有这些对象共同使用唯一一份static的成员变量 一个对象对该静态成员变量进行了修改 其他对象的该静态成员变量的值也会发生变化比如static int Age;Test t = new Test(); Test tt = new Test();
t.Age = 1; tt.Age = 2;
System.out.println(t.Age );
System.out.println(tt.Age);
打印的值都是2但是 这样写打印的值是不一样的 这是为什么?
System.out.println(t.Age = 1);
System.out.println(tt.Age = 2);
System.out.println(t.Age );
System.out.println(tt.Age);
打印的值都是2
是因为此时的age == 2;System.out.println(t.Age = 1);此时age == 1,所以打印1
System.out.println(tt.Age = 2);此时age == 2,所以打印2因为静态的值不在实例化对象引用范围,所以通常我们都是Test.Age = 1这种方式进行操作,当然你用实例化对象去引用操作,结果也不会有问题,它会重定向到Test.Age
而是用对象调用System.out.println(tt.Age);那么属性的值都会是一样的.
所以提倡用类调用属性
//静态变量相当于一个全局变量使用
public class Test {
static int a;//静态变量
public static void main(String[] args){
Test t1=new Test();
Test t2=new Test();
t1.a=1;
t2.a=2;//此时a的值是2,所有对象引用该变量的值都是2
System.out.println("t1.a="+t1.a);//t1.a=2
System.out.println("t2.a="+t2.a);//t2.a=2
System.out.println(t1.a=1);//此时将a的值置为1.相当于System.out.println(1);
System.out.println(t2.a=2);//此时将a的值置为2.相当于System.out.println(2);
System.out.println(3);
}
}