3、java虚拟机-类的生命周期-初始化阶段(与程序员有关)

本文探讨了Java中静态代码块的执行顺序、类何时被初始化(如通过输出检查、Class.forName、new对象和main方法)、构造方法字节码指令以及clinit字节码指令的执行情况。重点讲解了final修饰静态变量对类初始化的影响和实例分析。
摘要由CSDN通过智能技术生成

一 、静态代码块执行顺序和字节码文件中的执行顺序以及什么赋值。

类的生命周期-初始化阶段-被static所修饰的常量才会被赋予值
在这里插入图片描述
初始化阶段-代码中静态代码块和静态变量的顺序和字节码中的执行顺序是一致的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、4种情况下,类会被初始化。

1、怎样查看类是否被初始化了?

1.1 通过在代码中进行打印输出
在这里插入图片描述
-在代码里面进行输出,查看类会不会初始化
在这里插入图片描述

1.2 通过虚拟机参数-查看类会不会初始化
在这里插入图片描述
在这里插入图片描述

如果当前的类,中的静态变量被final所修饰,那么这个类是不会被初始化的。
在这里插入图片描述

2、ClassforName所调用的类会被初始化,不过ClassforName方法的重载方法中可以设置是否可以进行初始化。

在这里插入图片描述
3、通过new创建一个该对象时候,会被初始化。
在这里插入图片描述

4、执行Main方法的当前类会被初始化。

三、举例:执行顺序笔试题

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

构造方法字节码指令
在这里插入图片描述
在这里插入图片描述

一个类被初始化和加载,其中的静态代码块只会执行一次,而对象可以创建多次所以构造方法也可以执行多次,而代码块,通过字节码文件完们可以看到,是放到构造方法的字节码指令中执行的,且先执行,所以有了上述的输出结果。

四、什么情况下不会执行clinit(类初始化)字节码指令

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

在这里插入图片描述

前三个阶段总结:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
其中除非要执行方法,表示右边需要一个方法进行计算例如Integer.valueof(1);

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值