Java中变量,代码块,构造器之间执行顺序是怎么样的?
1 个回答
不必太张扬,是花自然香。kettyJava程序中类中个元素的初始化顺序 初始化的原则是: 先初始化静态部分,再初始化动态部分, 先初始化父类部分,后初始化子类部分, 先初始化变量,再初始化代码块和构造器。 所以依照这个规则可以得出总体顺序是: 1.父类的静态成员变量(如果是第一次加载类) 2.父类的静态代码块(如果是第一次加载类) 3.子类的静态成员变量(如果是第一次加载类) 4.子类的静态代码块(如果是第一次加载类) 5.父类的普通成员变量 6.父类的动态代码块 7.父类的构造器方法 8.子类的普通成员变量 9.子类的动态代码块 10.子类的构造器方法 下面写了一个Demo进行验证: ```java 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(); } } ``` 输出结果如下: ```java 1---Base类的静态成员变量staticInstance进行了初始化 2---Base类的静态代码块执行了 3---Child类的静态成员变量staticInstance进行了初始化 4---Child类的静态代码块执行了 5---Base类的普通成员变量instance进行了初始化 6---Base类的动态代码块执行了 7---Base类的构造器方法执行了 8---Child类的普通成员变量instance进行了初始化 9----Child类的动态代码块执行了 10---Child类的构造器方法执行了 ```发布于 2021-10-12 20:06 •IP属地 云南举报评论收藏
公众号进入网站体验更佳

