static
静态变量
:也叫类变量,属于类的。类中所以的实例都共享静态变量,也可以通过类名来访问它。静态变量在内存中只存在一份。静态方法
:静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须要实现,也就是说它不能是抽象方法。只能访问所属类的静态字段和静态方法,方法中不能有this或者super关键字。静态代码块
:静态代码块在类初始化的时候创建。静态内部类
:非静态内部类依赖于外部类的实例,而静态内部类则不需要,静态内部类不能访问外部类的非静态变量和方法;
初始化顺序:静态变量和静态代码块优先于实例变量和普通代码块;而静态变量和静态代码块的初始化顺序取决于他们在代码块的顺序。
public static String staticField = "静态变量"; ----1
static {
System.out.println("静态语句块"); ---- 2
}
public String field = "实例变量"; ---- 3
{
System.out.println("普通语句块"); ----4
}
// 最后才是构造函数的初始化
public InitialOrderTest() {
System.out.println("构造函数"); ----5
}
初始化补充
存在继承的情况下,初始化顺序为:
-
父类(静态变量、静态语句块)
-
子类(静态变量、静态语句块)
-
父类(实例变量、普通代码块)
-
父类(构造函数)
-
子类(实例变量、普通代码块)
-
子类(构造函数)
参考:https://www.iamshuaidi.com/935.html