周末,我一小学弟问我一道面试题,是关于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()的时候会先调用父类的构造器,然后再调用自身的构造器。
这样一分析,整个过程就明了了,下次碰到更多的继承 ,依然按照这个逻辑很快知道答案。