简述Java类加载方式及流程

本文介绍了Java的两种类加载方式:预先加载和按需加载。预先加载涉及Java基础类和含main()函数类的加载,而按需加载则在运行时动态进行。文章详细阐述了类的加载流程,包括装载、链接和初始化,并探讨了类加载器的工作原理,如bootstrap、extension和system类加载器的层次结构及其职责。最后,文章讨论了类加载的委派模型,强调了静态成员的引用如何触发类加载。
摘要由CSDN通过智能技术生成

在慕课网学习反射时想到自己之前学过的知识,故整理一番,希望能提供一点帮助,水平有限,如若有误欢迎指正。

Java提供了两种类的装载方式。一是预先加载,二是按需加载。因为可以对类进行按需加载,所以程序在启动时不需要把所有的类都装载到JVM中,大部分类都被延迟到使用时才动态加载。

1.预先加载

这里有Java基础类的加载和含main()函数类的加载。类加载器见文末补充。

Java基础类的加载流程:启动程序到jdk目录下找到并载入jvm.dll启动虚拟机初始化参数创建BootStrap Loader对象。
BootStrap Loader对象称为启动类装载器,它会在虚拟机启动时一次性加载JJVM的基础类。

含main函数的类加载:BootStrap Loader另一项工作就是负责装载定义在sun.misc命名空间下的Launcher类。Launcher类有两个内部类,ExcClassLoader和AppClassLoader,其中,ExtClassLoader的父加载器被设置为null,表示它的父加载器为BootStarp Loader,即它由BootStrap Loader直接装载,而AppClassLoader的父加载器为ExtClassLoader,含有main函数入口的类由AppClassLoader在程序启动时加载。

2.按需加载

即运行时动态装载,当需要使用这个类时,JVM才会去动态装载它。

1.装载条件:当一个类的静态成员被第一次引用时,JVM就会去装载它,包括【静态方法-静态属性-构造方法】

需要特别注意的是:

①当访问静态常量属性时,JVM加载类不会进行类的初始化工作。

②虽然构造方法没

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值