首页 > 其他 > 详细

类一定是在使用的时候才会被加载的么?

时间:2020-04-20 10:42:27      阅读:79      评论:0      收藏:0      [点我收藏+]

类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误)如果这个类一直没有被程序主动使用,那么类加载器就不会报告错误

 

我们都知道类如果有其父类,或者说有实现的相关接口,那么优先加载相应的父类或接下。但是除了这种情况,还有以下几种情况类也会被加载。

添加虚拟机参数:-verbose:class

第1种情况:调用某个方法,调用的方法内部会使用到某个类

public class ReloadTest {

    public static void main(String[] args)  {
        System.out.println("----------开始执行main方法----------");
        // 调用test方法开始使用PrintTest类
        test();
    }
    
    public static void test() {
        System.out.println(PrintTest.class.getClass());
    }

}

技术分享图片

 

但是下面这种情况下是不会加载这个类的

main方法不做任何操作,即不使用PrintTest这个类,当然也不会加载这个类的

public class ReloadTest {
    static {
        System.out.println("----------开始执行static 代码块----------");
    }

    public static void main(String[] args) {
    }
    
    public static void test() {
        System.out.println(PrintTest.class);
    }

}

技术分享图片

 

第2种情况:将PrintTest类作为方法的返回类型

public class ReloadTest {
    static {
        System.out.println("----------开始执行static 代码块----------");
    }
    
    public static void main(String[] args) {
    }
    
    public PrintTest test() {
        return null;
    }
}

来看一下控制台输出:

技术分享图片

 

类一定是在使用的时候才会被加载的么?

原文:https://www.cnblogs.com/caoxb/p/12735542.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!