错题系列知识点总结04

本文探讨了Java中JVM加载类时静态块和构造块的执行顺序。通过一个代码示例解释了当类被加载和对象被创建时,静态块和构造块的打印顺序,强调了JVM初始化类时的规则:静态优先,父类优先。并分析了不同初始化顺序对输出结果的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下代码的输出结果是?

public class B {

public static B b1 = new B();

public static B b2 = new B();

{

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

}

static {

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

}

public static void main(String[] args) {

B t = new B();

}

}

正确答案:构造块 构造块 静态块 构造块

解析:由static申明的,JVM在加载类的时候,会执行一次,执行顺序是从上到下依次执行。类中直接{}申明的构造块,每创建一个对象执行一次。此题JVM在加载类的时候从上到下先执行三个static,又因为b1,b2是创建的对象,要执行构造块,所以先输出两个“构造块”然后是“静态块”,类加载完毕执行main函数,main函数创建了一个对象t,执行一次构造块,又输出了“构造块”,因此答案是“构造块 构造块 静态块 构造块”。如果把静态块放到创建b1对象之前,那么输出结果将是“静态块 构造块 构造块 构造块”。

JVM初始化类的先后顺序:静态优先,父类优先。

静态变量/静态初始化块 > 普通变量/普通初始化块 > 构造器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值