类的加载分类详解

类的加载分类详解,第1张

类的加载分类详解 什么是加载

        Java中,类的生命周期有五个阶段:

        (1)加载:查找并获取类的class文件

        (2)链接:将class文件加载到JVM中

        (3)初始化:在JVM中根据class文件进行初始化,初始化只在类加载的时候执行一次

        (4)调用,如创建实例

        (5)卸载:运行结束,JVM对其进行清理

        而基于习惯,我们将前三个阶段“加载、链接、初始化”并称为“加载”

如何跟踪加载

下面,我们通过Idea中的命令对类的加载进行监控

 以2021版idea为例进行演示,需要预先配置vm options

使用  -XX:+TraceClassLoading   监控类的加载

通过关键词搜索监控类 

执行main()方法会加载类:

创建类的示例会被加载

类的生命周期未结束时,不会被加载

在继承关系的情况下,先加载父类,再加载子类

访问静态方法或静态变量,类会加载
public class MyUtil {
    public static void makeMoney(){
        System.out.println("工具人的makeMoney方法。。。");
    }
}
public class TestLoad {
    public static void main(String[] args) {
        System.out.println("测试类的加载。。启动main方法");
        MyUtil.makeMoney();
    }
}

使用反射Class.forName()时,类会加载

 Class.forName()除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块

而ClassLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance()才会去执行static块

加载final修饰的static属性的类

编译时就可以确定该值,访问时,无需加载该类

运行时才能确定该值,访问时,需要加载该类

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

原文地址: http://outofmemory.cn/zaji/5582786.html

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

发表评论

登录后才能评论

评论列表(0条)

保存