标签:跳转 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后再次执行)
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