3.深入理解jvm:java类加载--初始化及加载顺序问题

本文探讨了Java类加载的初始化阶段,详细阐述了触发类初始化的五种主动引用情况,并强调并非所有类都会进行初始化。通过实例说明了如何理解和避免对JVM工作原理的误解。
摘要由CSDN通过智能技术生成

接着上一份笔记,继续学习类加载部分:

2.立即初始化类的五种情况:
 

a.遇到new、getstatic、putstatic或invokestatic这4条字节码指令会触发其初始化;对应场景是使用new关键字、读取或设置一个类的静态字段(被final修饰,已在编译器期把几个放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候
b.使用java.lang.reflect包的方法对类进行反射调用的时候,触发初始化
c.当初始化类的时候,发现父类还没有进行过初始化时候,则需要先触发其父类的初始化
d.当虚拟机启动时候,用户u需要指定一个要执行的主类(包含main方法的类),虚拟机会优先初始化那个类
e.jdk1.7新方法动态语言获取到了几个关键字的句柄,触发初始化

 
3.在类加载的时候,介绍了几种被动引用的例子,不会导致初始化
      

a.子类引用了父类的静态字段,只会读父类进行初始化,不会对子类初始化,因为只会加载直接定义了这个静态字段的类才会被初始化
b.new 一个数组类型的对象,不会导致初始化,数组类型的这种形式是由虚拟机直接生成的
c.使用了一个被final修饰,且已经被加载到常量池中的字段也不会触发定义这个常量的类的初始化,因为jvm在编译时候有优化,相当于直接指向了该类的常量池中   

    针对初始化这一块,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值