Java 类加载编程面试题

首先看一段代码

它的输出结果是多少?

还是上面这段代码,把private static SingleTon singleTon = new SingleTon();移到类里的第一行。

打印结果又是什么呢?

 

Java 类加载编程面试题

类加载

虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是jvm的类加载机制。

运行时的动态加载给java语言提供了高度的灵活性,动态拓展也成为了java语言的特性之一。

类的生命周期

类的初始化时机

1、jvm 遇到 new 、 putStatic、 getStatic 、invokeStatic 指令时

2、使用反射java.lang.reflect时

3、初始化子类时,若父类还没初始化,那也要初始化父类

4、启动jvm虚拟机时,需要初始化指定的主类

5、java 7 动态语言的 MethodHandler 在解析时,也要对对应的类进行初始化

以上五种类型称为对一个类进行主动引用,除此之外,所有引用类型的方式都不会触发初始化,称为被动引用。

1、通过子类引用父类的静态变量,不会导致子类初始化

2、通过数组定义来引用类,不会触发此类的初始化

0