java什么时候会触发类加载_Java 类加载器classLoader | 七日打卡

Java类加载器在程序启动时加载类到内存中,包括启动类加载器、扩展类加载器和应用程序类加载器。类的初始化是类加载的触发点,例如main方法、new操作、静态字段访问等。Java采用双亲委派机制避免类重复加载和确保安全,但某些场景如Tomcat容器和热更新会破坏这一机制。自定义类加载器可以用于加密代码、非标准来源加载类等特殊需求。
摘要由CSDN通过智能技术生成

类加载器是什么?

Java程序启动时(或者在运行的过程中), jvm(Java虚拟机)会完成类的加载, 其中第一步就是使用类加载器classLoader将二进制流(.class文件)加载到内存中.

类加载器就是这样一个用来加载类文件的关键工具.

什么时候会触发类的加载?

Java虚拟机并没有强制要求何时必须完成对类的加载, 但是要求了类如果需要初始化的时候, 必须在这之前完成类的加载.

因此可以认为类初始化是类加载的触发时间点

Java虚拟机规定,有且只有以下五种情况时,必须立即对类进行初始化:虚拟机在用户指定包含main方法的主类后启动时

当使用 new 关键字对类进行实例化时、读取或者写入类的静态字段时、调用类的静态方法时,必须先触发对该类的实例化

使用反射对类进行反射调用时,如果该类没有初始化,必须先触发其初始化

初始化一个类,而该类父类还未初始化时,需要先对其父类进行初始化

在JDK7之后的版本中使用动态语言支持,java.lang.invoke.MethodHandle实例解析的结果是REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,而该句柄对应的类还未初始化时,必须先触发其实例化

什么样的类是同一个类?

jvm判断两个类是否是同一个类有两个条件类的全名相同 (即包全路径 + 类名)

类加载器相同

类加载器有哪些?

如果只是常规使用, 我们无需关心类加载器的相关问题, jvm中内置了3个类加载器已经能满足我们的日常需要.

内置类加载器根据层级从上往下依次是启动类加载器 -> 扩展类加载器 -> 应用程序类加载器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值