颜群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];

    }
}

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

常量的产生时机

小测试

相关推荐
期待のcode1 小时前
性能监控工具
java·开发语言·jvm
小白不会Coding2 小时前
一文详解JVM中类的生命周期
java·jvm·类的生命周期
TracyCoder1232 小时前
JVM 内存模型全景解析
jvm
洛豳枭薰3 小时前
jvm运行时数据区& Java 内存模型
java·开发语言·jvm
chilavert3184 小时前
技术演进中的开发沉思-319 JVM:附录指令集
jvm
wulalalalalalalal5 小时前
JVM(一):运行时数据区
jvm
期待のcode6 小时前
JVM 中对象进入老年代的时机
java·开发语言·jvm
阿达King哥6 小时前
hotspot中的Java类对象如何保存虚函数
java·jvm
Knight_AL18 小时前
用 JOL 验证 synchronized 的锁升级过程(偏向锁 → 轻量级锁 → 重量级锁)
开发语言·jvm·c#
情缘晓梦.1 天前
C++ 内存管理
开发语言·jvm·c++