类加载之Class.forName和ClassLoader

类加载阶段:加载、链接(验证、准备、解析)、初始化、使用、卸载

结论

  • Class.forNameClassLoader都可以对类进行加载
  • Class.forName加载类需要依赖ClassLoader
  • ClassLoader.loadClass只是加载类,不会触发类的初始化。可用于懒加载场景,提高系统启动速度
  • Class.forName加载类之后会触发类的初始化

Class.forName

Class.forName除了将类的class文件加载到jvm中(从下图可以看到Class.forName也是使用ClassLoader加载类的),还会触发类的初始化(执行静态代码块以及静态变量赋值
在这里插入图片描述
在这里插入图片描述

虽然forName0方法并未对该参数进行解释,但是从Class#forName(java.lang.String)的重载方法Class#forName(java.lang.String, boolean, java.lang.ClassLoader)可知该参数的作用,经验证,当initialize值为false时,并不会触发类的初始化
在这里插入图片描述

测试

在这里插入图片描述
结果
在这里插入图片描述

ClassLoader

ClassLoader使用双亲委派模型加载类,进行初始化。
ClassLoader.loadClass方法不需要类加载过程中的链接和初始化过程,这样可以有效的加快速度,把类的初始化工作留到实际使用时才触发。例如Spring IOC中大量使用了延迟加载技术

测试

在这里插入图片描述
执行结果
在这里插入图片描述

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值