码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-04-20 09:16:25      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:--   遇到   技术   需要   返回   图片   mamicode   color   jvm   

类加载器并不需要等到某个类被“首次主动使用”时再加载它,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;
    }
}

来看一下控制台输出:

技术图片

 

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

标签:--   遇到   技术   需要   返回   图片   mamicode   color   jvm   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!