JVM的初始化(<clinit>() 和 <init>() )

< clinit >()方法

之前讨论过类加载过程的初始化。(加载–>链接–>初始化),实际上该初始化过程是指JVM的类初始化过程。由JVM生成初始化方法 < clinnt >(),执行该方法执行初始化过程。
关于< clinit >()方法:

  • 1.由静态类变量显示赋值代码和静态代码块。
  • 2.执行顺序从上至下。

其执行时机如之前所说(类加载发生的时机):

  • 1.使用new实例化对象(数组对象不会)或者调用一个类的静态字段(static final类型的字段不会触发类加载)
  • 2.使用java.lang.reflect中的方法对类进行反射调用
  • 3.初始化一个子类,发现其父类未初始化,加载其父类。
  • 4.main方法所在的类(public修饰的类)会在虚拟机启动时被加载。
  • 5.但是用动态语言支持时,如果一个java.lang.invoke.MethodHandle实例后解析结果REF_putStatic,REF_getStatic, REF_invokeStatic的方法句柄时,当改方法句柄对应的类没有初始化时,需要初始化该类。(动态语言支持详情请查看)

< init >()方法

创建实例时会进行初始化(构造器的主要作用是进行初始化,指的便就是该过程)
关于< init >()方法:

  • 1.有多少个构造器就会有多少个< init >()方法
  • 2.< init >()具体执行内容包括非静态变量赋值操作,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值