类成员:
1、static关键字修饰的成员就是类成员
2、类成员包括:类变量、类方法、静态初始化块,三部分
3、static关键字不能修饰构造器
4、static关键字修饰的类成员属于整个类,不属于单个实例
5、类变量生命周期:类初始化完成,类变量也被初始化完成,直到类被卸载,类变量占的内存才被当做垃圾回收,类变量的生存范围与类的生存范围一致
6、类变量可以通过类来访问,也可以通过类的对象来访问,但通过类的对象来访问时,实际上并不是访问该对象所拥有的变量,因为系统创建该类的对象时,不会为该对象分配类变量的内存,也不会再次为该类变量初始化
也就是说类的对象根本不会拥有该类的类变量
7、通过类对象来访问类的变量其实是一种假象:
7.1、通过类的对象访问的类变量依然是该类的类变量
7.2、当通过对象来访问类变量时,系统会在底层转换为通过类来访问类变量
8、很多语言都不允许通过类对象来访问类变量,类变量都要通过类来访问
代码示例:
public class NullAccessStatic{ private static void test(){ System.out.println("不通过类对象来访问类方法"); } public static void main(String[] args){ NullAccessStatic sta =null; //-不通过类对象,一样访问类方法: sta.test(); } }
运行结果:
总结:
1、当用实例来访问类成员时,实际上依然是委托该类来访问类成员
2、因此即使某个实例为null,也可以访问它所属类的类成员
对static关键字而言,几条重要的规则:
1、类成员不能访问实例成员:类成员属于类,类成员作用域比实例成员要大
2、有可能出现类成员已经初始化,而实例成员还未初始化的情况,如果这时候类成员访问实例成员,会报错
热心技术,并兼吃喝,偶谈风月,不言国事.