有如下代码块
class MyOrderCls{
{
System.out.println("1111");
}
static {
System.out.println("222");
}
public MyOrderCls() {
System.out.println(" 父类的构造器 EEEE");
}
}
/**
继承关系。。
*/
class MyOrderClsChild extends MyOrderCls{
{ System.out.println(" MyOrderClsChild AAAA 。。");}
static { System.out.println(" MyOrderClsChild BBB .."); }
public MyOrderClsChild() {
//super();
System.out.println(" MyOrderClsChild 构造器....");
}
}
在现在执行如下代码
MyOrderCls myOrderCls = new MyOrderClsChild();
结果会如何呢?
这里不给具体结果,只给具体结论,如果是第一个实例化则有继承关系的类执行顺序为:
- 先执行父类的静态块 , 因为加载子类必须先加载父类
- 再继承类的静态块
- 再父类动态(构造)块
- 父类构造器 java规范
- 子类的动态(构造)块
- 子类构造器
- 在上述中如果有相同级别的多段代码块,则按照代码的顺序执行。比如一个类中有几个静态块,则先执行前边的。
本文探讨了Java中类加载及初始化的过程,特别是在涉及继承关系时的类加载和静态、非静态成员初始化顺序。通过一个具体的代码示例,详细解析了父类与子类在实例化过程中的执行流程。
1248

被折叠的 条评论
为什么被折叠?



