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

Posted szwa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态构造代码块构造代码块构造方法执行的顺序问题相关的知识,希望对你有一定的参考价值。

/
当前方法的执行结果是什么?请简述原理
/
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就是我啦~







































































以上是关于静态构造代码块构造代码块构造方法执行的顺序问题的主要内容,如果未能解决你的问题,请参考以下文章

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

静态代码块静态变量构造方法及构造块执行顺序

Java面试题 静态代码块 构造代码块 构造方法 的执行顺序

java静态代码块,构造方法,构造代码块的执行先后顺序

java代码块,静态代码块,静态变量,构造方法执行顺序

一文详解:Java中父子类静态块构造块构造方法成员变量之间的初始化先后顺序与执行先后顺序