1、静态字段
类的字段可以被标记为static。
静态字段可以创建真正的全局变量。Java不允许在在类定义之外来创建可以访问的全局变量。但是,可以使用static关键字来创建可以访问的全局变量。
静态字段与类自身的定义相关联,在类的所有实例之间共享。当类被实例化时,不会为静态字段分配独立的内存。静态字段的内存分配仅发生一次,就是在类加载的时候。当JVM将类的定义加载到内存中时,会为类的所有静态字段分配内存空间。分配的内存空间将在类的所有对象之间共享。
如在一个Ball类中声明一个静态变量count;
private static int count=0;
每次创建一个新实例时count++;
1.1通过对象引用访问静态字段
使用类名来访问静态方法: new 类().静态方法();
1.2 继承静态字段
类的字段和方法被子类继承的方式相同,类的静态字段将被子类继承
访问方式:new 子类().静态方法();
1.3 创建真正的全局变量
public static int count=0;可以在代码的任何地方使用 类名.count 来访问
1.4 创建应用程序常量
将全局变量声明为final,就可以创建常量,在整个程序中都不能被修改。
如 public final static double PI=3.14;
PI值不能被修改,可以使用 类名.PI 来访问,可见性取决于访问修饰符,本例使用public
1.5 注意事项
(1)静态字段属于类而不是对象(类的实例)
(2)静态变量只在开始时被初始化一次
(3)在任何实例变量初始化之前初始化所有静态字段
(4)静态字段可以直接通过类名来访问,不需要任何对象引用。
2、静态方法
2.1 静态方法通过类引用调用
2.2 特殊方法main被声明为静态的,因此在启动应用程序时不需要创建main方法所属类的实例
2.3 静态方法可以访问类的静态字段和方法
2.4 静态方法不能访问类的非静态字段和方法
2.5 静态方法不能被子类重写
3、静态初始化器
静态初始化容器仅在加载类时执行一次。类可以包含多个静态初始化器,他们按照在类中出现的顺序执行
static int A; static int B; static { A=0; } static { B=0; }
注意事项:
3.1 JVM将静态初始化容器的大小限制为64KB
3.2 不能从静态初始化器中抛出异常
3.3 不能在静态初始化器中使用this关键字,因为目前还没有创建实例
3.4 不能在静态初始化器中显式地调用super
3.5 静态初始化器没有返回类型