static 修饰的变量称为类变量或全局变量或成员变量,在类被加载的时候成员变量即被初始化,与类关联,只要类存在,static变量就存在。
一个static变量单独划分一块存储空间,不与具体的对象绑定在一起,该存储空间被类的各个对象所共享。
也就是说当声明一个对象是,并不产生static变量的拷贝,而是该类所有的实例对象共用同一个static变量。
非static修饰的成员变量是在对象new出来的时候划分存储空间,是与具体的对象绑定的,该成员变量仅为当前对象所拥有的。
对象在引用成员变量是直接通过类名.变量名调用,对象在引用实例变量时只能通过对象名.变量名调用。
在类中调用成员变量时直接调用或者以类名.变量名方式调用,实例变量则用this或者直接调用。
对象共享的代码验证:
建一个类,包含一个静态变量,一个普通变量
class Sta{ public static int a; public String b; public Sta(int c,String d) { a=c; b=d; } }
测试代码
Sta s1=new Sta(2,"sd"); //在一个类的对象中修改static变量时,所有类的值都会变
System.out.println(s1.a);
System.out.println(s1.b);
Sta s2=new Sta(32,"d");
System.out.println(s1.a);
System.out.println(s1.b);
System.out.println(s2.a);
System.out.println(s2.b);
s2.a=4;
System.out.println(s1.a);
System.out.println(s2.a);
结果如下:
2
sd
32
sd
32
d
4
4
发现在s2对象改变static变量a的值时,s1的值也一并改变了。