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

    }
}

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

常量的产生时机

小测试

相关推荐
袋鼠云数栈11 小时前
整库迁移与分库分表同步:批量数据搬迁的配置简化思路
jvm·数据库·oracle
Mr. zhihao14 小时前
JVM 偏向锁 4 秒延迟:从源码动机到 JEP-374 废弃全链路
jvm·并发·偏向锁
孙克旭_15 小时前
JVM 入门详解:JVM、JRE、JDK 区别,JVM 基础结构梳理
java·开发语言·jvm
随遇而安zx15 小时前
【地基篇】---JVM 内存结构知识点(Java 8 运行时数据区深度解析)
java·开发语言·jvm
恒拓高科WorkPlus17 小时前
企业如何搭建安全内部通讯平台|企业内部通讯平台怎么选才更安全?
jvm·数据库·安全
随遇而安zx19 小时前
【地基篇】---JVM 类加载 源码解析(基于 Java 8)
java·jvm·python
ly76892 天前
JVM 类加载机制:打破双亲委派模型的实践与陷阱
jvm·热部署·spi·类加载器·双亲委派
随遇而安zx2 天前
【地基篇】---Java 8 JVM 知识大纲
java·开发语言·jvm
liangbo72 天前
01-JVM 内存模型全景
java·jvm
ly76892 天前
JVM 内存屏障与可见性:从 volatile 到 JSR-133 的底层实现
jvm·jit·volatile·内存屏障·jmm·jsr-133