Java类加载顺序练习题
Posted zxfei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java类加载顺序练习题相关的知识,希望对你有一定的参考价值。
一、题目
public class Test
public static Test t1 = new Test();// 标记1
// 普通代码块
System.out.println("block A");// 标记2
// 静态代码块
static
System.out.println("block B");// 标记3
public static void main(String[] args)
Test t2 = new Test();// 标记4
二、知识点
类的加载顺序
- 父类静态对象和静态代码块
- 子类静态对象和静态代码块
- 父类非静态对象和非静态构造代码块
- 父类构造函数
- 子类非静态对象和非静态构造到代码块
- 子类构造函数
- 普通代码块
上述加载顺序中,类中静态代码块按照声明顺序执行,并且1和2在类加载到方法区的时候执行,也就是不需要在调用new实例的时候就执行了。
三、答案解析
- 首先进入Test类,没有父类,那就执行自身的静态对象和代码块,并且按照声明顺序执行。
- 所以首先执行标记1的静态对象,并且进行了实例化,所以需要调用相应的构造代码块,执行了标记2的语句,所以输出了block A;
- 执行完毕后顺序执行静态代码块,也就是标记3的语句,所以输出了blockB;
- 继续执行静态的main方法,重新实例化Test对象,再次调用构造代码块,再次输出了标记2的语句,所以再次输出了block A;
所以最终的结果为:
block A
block B
block A
以上是关于Java类加载顺序练习题的主要内容,如果未能解决你的问题,请参考以下文章