关于一道static面试题的理解

本文通过实例详细解析了Java中静态代码块的执行过程,包括类加载时机、静态代码块与main方法的执行顺序,以及构造器的调用流程。

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

周末,我一小学弟问我一道面试题,是关于static的 ,我为了给他讲解清楚,写了一个测试,然后给他解释下我的理解

 

首先,我写了两个类BaseTest 和TestA, TestA继承BaseTest

截图如下:

运行main方法后,控制台输出:

 

 

首先我们需要明确以下2点:

1.static代码块是在类初始化时就被虚拟机执行的;

2.main方法是静态方法,是在类加载完之后由虚拟机调用的;

 

 

那么再来看这段代码具体的执行过程

1.在执行开始,先要寻找到main方法,因为main方法是程序的入口,但是在执行main方法之前,必须先加载TestA这个类

2.加载TestA类的时候发现TestA类继承自BaseTest类,因此会转去先加载BaseTest类,在加载BaseTest类的时候,发现有static块,便执行了static块。

3.在BaseTest类加载完成之后,便继续加载TestA类,然后发现TestA类中也有static块,便执行static块。在加载完所需的类之后,便开始执行main方法。

4.在main方法中执行new TesAt()的时候会先调用父类的构造器,然后再调用自身的构造器。

这样一分析,整个过程就明了了,下次碰到更多的继承 ,依然按照这个逻辑很快知道答案。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值