Java中变量,代码块,构造器之间执行顺序是怎么样的?

在 Java 中,类的初始化和实例化是有一定顺序的。总结如下: 1. **父类的静态成员变量**(如果是第一次加载类) 2. **父类的静态代码块**(如果是第一次加载类) 3. **子类的静态成员变量**(如果是第一次加载类) 4. **子类的静态代码块**(如果是第一次加载类) 5. **父类的普通成员变量** 6. **父类的动态代码块** 7. **父类的构造器方法** 8. **子类的普通成员变量** 9. **子类的动态代码块** 10. **子类的构造器方法** 这个顺序可以通过以下代码和输出结果进行验证: ```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类的构造器方法执行了 ``` 通过这个输出结果,可以看到各个部分的初始化顺序如下所示: 1. **Base 类的静态成员变量初始化** 2. **Base 类的静态代码块执行** 3. **Child 类的静态成员变量初始化** 4. **Child 类的静态代码块执行** 5. **Base 类的普通成员变量初始化** 6. **Base 类的动态代码块执行** 7. **Base 类的构造器方法执行** 8. **Child 类的普通成员变量初始化** 9. **Child 类的动态代码块执行** 10. **Child 类的构造器方法执行**