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

    }
}

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

常量的产生时机

小测试

相关推荐
天***889614 小时前
JVM的内存分配策略对垃圾回收有什么影响?
jvm
用手手打人1 天前
JVM(七)--- 垃圾回收
jvm
艾菜籽1 天前
JVM的类加载机制
jvm
小胖同学~1 天前
JVM内存模型剖析
java·jvm
艾菜籽1 天前
JVM中的内存区域划分
jvm
9毫米的幻想1 天前
【Linux系统】—— 程序地址空间
java·linux·c语言·jvm·c++·学习
C++chaofan1 天前
Redisson分布式限流
java·jvm·spring boot·redis·分布式·mvc·redisson
tanxiaomi2 天前
通过HTML演示JVM的垃圾回收-新生代与老年代
前端·jvm·html
_extraordinary_2 天前
Java JVM --- JVM内存区域划分,类加载,GC垃圾回收
java·开发语言·jvm