6.3 类成员 6.3.1 理解类成员

6.3 类成员

static关键字修饰的成员就是类成员,前面已经介绍的类成员类变量类方法类初始化块三个成员,

static不能修饰构造器

static关键字不能修饰构造器。 static修饰的类成员属于整个类,不属于单个实例。

6.3.1 理解类成员

java类中的五种成员

在Java类里只能包含:

  • 成员变量、
  • 方法、
  • 构造器、
  • 初始化块、
  • 内部类(包括接口、枚举)

这5种成员,

static可以修饰哪些类成员

static可以修饰成员变量方法初始化块内部类(包括接口、枚举)这四种成员,以static修饰的成员就是类成员。类成员属于整个类,而不属于单个对象。

类变量详解

类变量属于整个类,当系统第一次准备使用该类时,系统会为该类变量分配内存空间,类变量开始生效,直到该类被卸载,该类的类变量所占有的内存才被系统的垃圾回收机制回收。类变量生存范围几乎等同于该类的生存范围。当类初始化完成后,类变量也被初始化完成。
类变量既可通过来访问,也可通过类的对象来访问当通过对象来访问类变量时,系统会在底层转换为通过该类来访问类变量
从程序运行表面来看,可以看到同一类的所有实例的共享同一个类变量

类方法详解

类方法也是类成员的一种,类方法也是属于类的,通常直接使用类作为调用者来调用类方法,但也可以使用对象来调用类方法。与类变量类似,即使使用对象来调用类方法,其效果也与采用类来调用类方法完全一样。

对象访问类成员都是通过类来访问

当使用实例来访问类成员时,实际上依然是委托给该类来访问类成员,因此即使某个引用变量的值为null它也可以访问它所属类的类成员

静态初始化块

静态初始化块也是类成员的一种,静态初始化块用于执行类初始化动作,在类的初始化阶段,系统会调用该类的静态初始化块来对类进行初始化。一旦该类初始化结束后,静态初始化块将永远不会获得执行的机会

类成员不能访问实例成员

static关键字而言,有一条非常重要的规则:类成员不能访问实例成员

为什么类成员不能访问实例成员

因为类成员是属于类的,类成员的作用域比实例成员的作用域更大,完全可能出现类成员已经初始化完成,但实例成员还不曾初始化的情况,如果允许类成员访问实例成员将会引起大量错误。