栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

类的加载分类详解

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

类的加载分类详解

什么是加载

        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属性的类

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

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

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

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

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