java中初始化顺序,Java中种的初始化顺序

Java中类的初始化顺序

当我们使用new创建一个对象的时候,这个对象会在类的继承体系中按以下顺序执行初始化:

1.初始化父类的静态变量和静态代码块,按它们在代码中定义的顺序执行(先定义先执行);

2.初始化子类的静态变量和静态代码块,按它们在代码中定义的顺序执行(先定义先执行);

3.初始化父类的实例变量和实例代码块,按它们在代码中定义的顺序执行(先定义先执行);

4.执行父类的构造方法;

5.初始化子类的实例变量和实例代码块,按它们在代码中定义的顺序执行(先定义先执行);

6.执行子类的构造方法。

当该类存在多层次的继承体系时,则按以上顺序递归地执行初始化。

/**

* 父类

*/

class SuperClass

{

//父类的静态代码块

static

{

System.out.println("Initalizing static block in SuperClass\n");

}

//父类的实例代码块

{

System.out.println("Initalizing instance block in SuperClass\n");

}

//父类的静态变量

public static Var StaticSuperVar = new Var("static variable in SuperClass");

//父类的实例代变量

public Var superVar = new Var("variable in SuperClass");

//父类的构造方法

public SuperClass()

{

System.out.println("Initalizing SuperClass\n");

}

}

/**

* 子类

*/

class SubClass extends SuperClass

{

//子类的静态变量

public static Var StaticSubVar = new Var("static variable in SubClass");

//子类的实例变量

public Var subVar = new Var("variable in SubClass");

//子类的静态代码块

static

{

System.out.println("Initalizing static block in SubClass\n");

}

//子类的实例代码块

{

System.out.println("Initalizing instance block in SubClass\n");

}

//子类的构造方法

public SubClass()

{

System.out.println("Initalizing SubClass\n");

}

}

/**

* 辅助类

*/

class Var

{

public Var(String name)

{

System.out.println("Initalizing " + name + "\n");

}

}

/**

* 测试类

*/

public class InitOrderTest

{

public static void main(String[] args)

{

SubClass subClass = new SubClass();

}

}

运行结果:

Initalizing static block in SuperClass

Initalizing static variable in SuperClass

Initalizing static variable in SubClass

Initalizing static block in SubClass

Initalizing instance block in SuperClass

Initalizing variable in SuperClass

Initalizing SuperClass

Initalizing variable in SubClass

Initalizing instance block in SubClass

Initalizing SubClass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值