颜群JVM【03】类的初始化

颜群JVM【03】类的初始化

类的初始化:JVM只会在首次主动使用一个类/接口时,才会初始化它们 。

主动使用

1.new 构造类的实例

2.访问类/接口的静态成员(属性、方法)

复制代码
注:main()本身也是一个静态方法,因此main()的所在类也会被初始化

特殊情况:

	- 如果成员变量既是static,又是final ,即常量(放在常量池中),则不会被初始化
	- 上一种情况中,如果常量的值是一个随机值,则会被初始化 (为了安全)

3.执行反射时使用的类,比如:Class.forName("");

4.初始化一个子类时,该子类的父类也会被初始化

5.动态语言在执行时所涉及的类也会被初始化(动态代理)

被动使用

除了主动以外,其他都是被动使用。

比如:

java 复制代码
package init;
class BD
{
    static {
        System.out.println("BD...");
    }
}

public class BeiDong {
    public static void main(String[] args) {
        BD[] bds = new BD[3];

    }
}

以上代码,不属于主动使用类,因此不会被初始化。

常量的产生时机

小测试

相关推荐
On The Road :2 天前
深入理解 JVM 垃圾回收:GC 是什么、如何判定垃圾、四大回收算法全解析
jvm·算法
Yves..2 天前
JVM 学习笔记:内存区域、类加载机制与垃圾回收
jvm
akinggw3 天前
libagentcore - 一个基于c++的AI多agent系统升级到2.0版本
开发语言·jvm·c++
yh弓长3 天前
JVM 核心机制
jvm
tg_xianheyun4 天前
腾讯云国际账号注册代充值适合哪些海外业务场景?
jvm
yuniko-n4 天前
【JVM】对象内存布局
java·开发语言·jvm
wuminyu4 天前
JVM执行引擎学习总结:热点字节码编译成本地机器码
java·linux·c语言·jvm·c++
wuminyu4 天前
JVM规范学习总结:解释器与JIT编译器如何处理JVM字节码
java·linux·c语言·jvm·c++
骑着蜗牛撵大象3274 天前
大模型 Agent 的沙箱护栏:gVisor 隔离、出口白名单与审计闭环
java·开发语言·jvm·安全·agent沙箱·gvisor·microvm
tryxr4 天前
JVM 垃圾回收机制
java·jvm·gc·垃圾回收