栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JVM何时加载类?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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而崩溃。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号