Java类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的, 静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。首次装载后,再次生成该类实例时,类的静态成员均不再执行。
Java里类加载顺序为:
先初始化父类的静态代码—>初始化子类的静态代码–>初始化父类的非静态代码—>初始化父类构造函数—>初始化子类非静态代码—>初始化子类构造函数
代码验证:
//父类
public class Parent {
{
System.out.println("父类非静态块执行");
}
static {
System.out.println("父类静态块执行");
}
public Parent() {
System.out.println("父类构造方法");
}
}
//子类
public class Child extends Parent {
{
System.out.println("子类非静态块执行");
}
static {
System.out.println("子类静态块执行");
}
public Child() {
System.out.println("子类构造方法");
}
public static void main(String[] args) {
Child c = new Child();
System.out.println("--------------");
Child c2 = new Child();
}
}
//运行结果:
//父类静态块执行
//子类静态块执行
//父类非静态块执行
//父类构造方法
//子类非静态块执行
//子类构造方法
--------------
//父类非静态块执行
//父类构造方法
//子类非静态块执行
//子类构造方法