JVM何时加载类?

JVM何时加载类?,第1张

JVM何时加载类?

仅当您需要有关该类的信息时才加载该类。

public class SomethingCaller {    public static Something something = null; // (1) does not cause class loading    public static Class<?> somethingClass = Something.class; // (2) causes class loading    public void doSomething() {        new Something(); // (3) causes class loading    }}

第(2)和(3)行将导致该类被加载。Something.class对象包含仅来自类定义的信息(第(2)行),因此您需要加载该类。对构造函数(3)的调用显然需要类定义。对于该类上的任何其他方法类似。

但是,第(1)行不会导致类被加载,因为您实际上不需要任何信息,它只是对对象的引用。

编辑:在您更改的问题,您询问是否引用Something.class加载该类。是的,它确实。直到main()被执行,它才加载类。使用以下代码

public class SomethingTest {    public static void main(String[] args) {        new SomethingCaller();    }}public class SomethingCaller {    public void doSomething() {        Class<?> somethingClass = Something.class;    }}public class Something {}

此代码不会导致Something.class加载。但是,如果我调用doSomething(),则会加载该类。要对此进行测试,请创建上述类,对其进行编译,然后删除Something.class文件。上面的代码不会因ClassNotFoundException而崩溃。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5488732.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存