类成员:

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、有可能出现类成员已经初始化,而实例成员还未初始化的情况,如果这时候类成员访问实例成员,会报错

原文地址:https://www.cnblogs.com/baby-zhude/p/8065961.html