您的位置:首页 > 编程语言 > Java开发

java对象实例化过程中的代码执行顺序

2017-08-10 08:53 549 查看

java对象实例化过程中的代码执行顺序

1、执行顺序

(1)执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容;
(2)子类的静态内容执行完毕之后,初始化父类的成员变量--->执行父类的非静态语
句块--->执行父类的构造方法。
(3)父类的构造方法执行完毕之后,初始化子类的成员变量--->执行子类的非静态语
句块--->执行子类的构造方法。


2、例证

(1)Base.java

public class Base{

public String whenAmISet = "set when declared in parent class";

Base() {
System.out.println("4 parent Constructor , it will invoke
preProcess() from child class.");
preProcess(); //调用子类的preProcess;
}

void preProcess() {}
//静态语句块
static {
System.out.println("1 parent static block ");
}
//非静态语句块
{
System.out.println("3 parent dynamic block , after
initialized filed from parent class,");
}
}


(2)Derived.java

public class Derived extends Base
{
public String whenAmISet = "set when declared";

@Override void preProcess()
{
whenAmISet = "set in preProcess()";
}

Derived() {
System.out.println("6 child constructor ");
}

static {

System.out.println("2 child static block");
}

{
System.out.println("5 child dynamic block  , after
initialized filed from child class.");
}
}


(3)Main.java

public class Main
{
public static void main(String[] args)
{
Derived d = new Derived();
System.out.println( d.whenAmISet );
}
}


输出:

1 parent static block

2 child static block

3 parent dynamic block , after initialized filed from parent class,

4 parent Constructor , it will invoke preProcess() from child class.

5 child dynamic block , after initialized filed from child class.

6 child constructor

set when declared

提示:想观察执行顺序,可在eclipse选用debug模式,在每行代码输出处打断点观察执行顺序。

参考资料:

(1)Java 静态语句块、语句块、构造函数执行顺序

http://www.cnblogs.com/jycboy/p/5257615.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: