码迷,mamicode.com
首页 > 其他好文 > 详细

静态构造代码块、构造代码块、构造方法执行的顺序问题

时间:2018-10-22 22:21:33      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:跳转   csdn   程序   文章   类对象   art   代码执行   blog   地方   

/
当前方法的执行结果是什么?请简述原理
/
class Demo1 {
static {
Demo2 d = new Demo2();
}
{
System.out.println("我是Demo1的构造代码块");
}
public Demo1() {
System.out.println("我是Demo1的构造方法");
}
}
class Demo2 {
static {
Demo1 d = new Demo1();
}
{
System.out.println("我是Demo2的构造代码块");
}
public Demo2() {
System.out.println("我是Demo2的构造方法");
}
}
class Test {
public static void main(String[] args) {
Demo2 d2 = new Demo2();
Demo1 d1 = new Demo1();
}
}

执行结果是:
我是Demo2的构造代码块
我是Demo2的构造方法
我是Demo1的构造代码块
我是Demo1的构造方法
我是Demo2的构造代码块
我是Demo2的构造方法
我是Demo1的构造代码块
我是Demo1的构造方法

执行原理:
1.程序进入main方法中,程序跳到Demo2 d2 = new Demo2();
这里要创建Demo2的类对象,需要进到class Demo2里面
2.程序进入class Demo2 中,这里存在static静态构造代码块
程序先执行static里面的语句,Demo1 d = new Demo1(); 程序跳到了class Demo1中
(Demo2里的 代码块 和 构造方法被暂时搁置执行完static后再次执行)
3.当前程序进入了class Demo1里面 这里存在static静态构造代码块
先执行static里面的语句, Demo2 d = new Demo2(); 程序跳到了class里
(Demo1里的 代码块 和 构造方法被暂时搁置,执行完static后再次执行)

  1. 当前程序进入了class Demo2中,静态代码块执行过,不再执行,构造代码块不会单独执行
    所以程序先跳到public Demo2()上,不进入方法内部,而是调用构造代码块
    这里执行了Demo2里的构造代码块,程序输出了第一行文字:
    ------------------------------------------“我是Demo2的构造代码块”
  2. 当前程序在执行完Demo2里的代码块之后开始执行构造方法里的语句,输出第二行文字:
    ------------------------------------------“我是Demo2的构造方法”
  3. 重点来了,程序从这里执行完之后再次进行跳转,跳转到第二次搁置代码的地方,也就是
    再次跳回到class Demo1里面,执行刚才被搁置的语句,输出构造代码块构造方法的语句:
    -------------------------------------------“我是Demo1的构造代码块”
    -------------------------------------------“我是Demo1的构造方法”
  4. class Demo1中被搁置的代码执行完之后,程序调到第一次搁置代码的地方
    也就是第一次进入class Demo2执行后只执行了静态代码块,执行被搁置的语句:
    代码块和构造方法
    输出了两行语句:
    -------------------------------------------“我是Demo2的构造代码块”
    -------------------------------------------“我是Demo2的构造方法”
    到这里main方法里面的第一行语句 才完全执行完

7.接下来程序跳到第二行语句 Demo1 d1 = new Demo1();
进入class Demo1里面去,进去跳到静态代码块上,发现静态代码块已经被执行过,不再执行
程序跳到 构造方法上,执行构造代码块,最后执行构造方法
程序会分别输出语句
-------------------------------------------“我是Demo1的构造代码块”
-------------------------------------------“我是Demo1的构造方法”
8.程序执行完毕
---------------------
作者:Szw‘S
来源:CSDN
原文:https://blog.csdn.net/weixin_41334738/article/details/83243832
版权声明:本文为博主原创文章,转载请附上博文链接!

PS:Szw‘s就是我啦~

静态构造代码块、构造代码块、构造方法执行的顺序问题

标签:跳转   csdn   程序   文章   类对象   art   代码执行   blog   地方   

原文地址:https://www.cnblogs.com/szwa/p/9833169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!