zoukankan      html  css  js  c++  java
  • 类一定是在使用的时候才会被加载的么?

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

    来看一下控制台输出:

  • 相关阅读:
    雅虎、网易ajax标签导航效果的实现
    仿淘宝网站的导航标签效果!
    FLASH2007展望
    "运行代码”功能整理发布
    获取远程文件保存为本地文件(精简实用)
    整理JS+FLASH幻灯片播放图片脚本代码
    解决IE更新对FLASH产生影响
    模仿combox(select)控件
    0209.Domino R8.0.x升级指南
    Lotus Domino 中的高级 SMTP 设置Notes.ini相关参数
  • 原文地址:https://www.cnblogs.com/caoxb/p/12735542.html
Copyright © 2011-2022 走看看