第十四题: 以下代码的输出结果是?

第十四题:

以下代码的输出结果是?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public class B

{

    public static B t1 = new B();

    public static B t2 = new B();

    {

        System.out.println("构造块");

    }

    static

    {

        System.out.println("静态块");

    }

    public static void main(String[] args)

    {

        B t = new B();

    }

}

 

A 静态块 构造块 构造块 构造块
B 构造块 静态块 构造块 构造块
C 构造块 构造块 静态块 构造块
D:构造块 构造块 构造块 静态块

懵逼树上懵逼果,懵逼树下你和我

首先看到这道题,我就想着那不是先静态代码块先执行吗

话不多说,直接跑代码

public class B

{

    public static B t1 = new B();

    public static B t2 = new B();

    {

        System.out.println("构造块");

    }

    static

    {

        System.out.println("静态块");

    }

    public static void main(String[] args)

    {

        B t = new B();

    }

}

运行结果

接着我们看看大家的评论


开始时JVM加载B.class,对所有的静态成员进行声明,t1 t2被初始化为默认值,为null,又因为t1 t2需要被显式初始化,所以对t1进行显式初始化,初始化代码块→构造函数(没有就是调用默认的构造函数),咦!静态代码块咋不初始化?因为在开始时已经对static部分进行了初始化,虽然只对static变量进行了初始化,但在初始化t1时也不会再执行static块了,因为JVM认为这是第二次加载类B了,所以static会在t1初始化时被忽略掉,所以直接初始化非static部分,也就是构造块部分(输出''构造块'')接着构造函数(无输出)。接着对t2进行初始化过程同t1相同(输出'构造块'),此时就对所有的static变量都完成了初始化,接着就执行static块部分(输出'静态块'),接着执行,main方法,同样也,new了对象,调用构造函数输出('构造块')

最后答案选择C

文章仅个人理解,来在各大网站。如有不合理之处,欢迎吐槽。

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期科技领域知识)

歌谣带你看java面试题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:点我我会动 设计师:我叫白小胖 返回首页
评论

打赏作者

普通网友

放弃很容易 但是坚持一定很酷

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值