Java程序中类中个元素的初始化顺序 初始化的原则是:
先初始化静态部分,再初始化动态部分,
先初始化父类部分,后初始化子类部分,
先初始化变量,再初始化代码块和构造器。
所以依照这个规则可以得出总体顺序是:
1.父类的静态成员变量(如果是第一次加载类)
2.父类的静态代码块(如果是第一次加载类)
3.子类的静态成员变量(如果是第一次加载类)
4.子类的静态代码块(如果是第一次加载类)
5.父类的普通成员变量
6.父类的动态代码块
7.父类的构造器方法
8.子类的普通成员变量
9.子类的动态代码块
10.子类的构造器方法
下面写了一个Demo进行验证:
public class Base {
static Instance staticInstance = new Instance("1---Base类的静态成员变量staticInstance");
static {
System.out.println("2---Base类的静态代码块执行了");
}
Instance instance = new Instance("5---Base类的普通成员变量instance");
{
System.out.println("6---Base类的动态代码块执行了");
}
Base() {
System.out.println("7---Base类的构造器方法执行了");
}
}
public class Child extends Base {
static Instance staticInstance = new Instance("3---Child类的静态成员变量staticInstance");
static {
System.out.println("4---Child类的静态代码块执行了");
}
Instance instance = new Instance("8---Child类的普通成员变量instance");
{
System.out.println("9----Child类的动态代码块执行了");
}
Child() {
System.out.println("10---Child类的构造器方法执行了");
}
public static void main(String[] args) {
Child child = new Child();
}
}
输出结果如下:
1---Base类的静态成员变量staticInstance进行了初始化
2---Base类的静态代码块执行了
3---Child类的静态成员变量staticInstance进行了初始化
4---Child类的静态代码块执行了
5---Base类的普通成员变量instance进行了初始化
6---Base类的动态代码块执行了
7---Base类的构造器方法执行了
8---Child类的普通成员变量instance进行了初始化
9----Child类的动态代码块执行了
10---Child类的构造器方法执行了
说明确实是按照上面的
原创文章,作者:9IM,如若转载,请注明出处:https://www.9im.cn/423.html