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

    }
}

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

常量的产生时机

小测试

相关推荐
Derek_Smart2 天前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
大道至简Edward2 天前
深入 JVM 核心:一文读懂 Class 文件结构(附 Hex 实战解析)
jvm
weisian1515 天前
JVM--20-面试题6:如何判断对象可以被垃圾回收?
jvm·可达性算法
蚊子码农5 天前
每日一题--JVM线程分析与死锁排查
jvm
xuxie996 天前
NEXT 1 进程2
java·开发语言·jvm
weisian1516 天前
JVM--19-面试题5:说说JVM的类加载机制和双亲委派模型
jvm·双亲委派模型·jvm类加载机制
亓才孓6 天前
【反射机制】
java·javascript·jvm
Volunteer Technology6 天前
JVM之性能优化
jvm·python·性能优化
Andy Dennis6 天前
Java语法注意事项
java·开发语言·jvm
坚持的小马6 天前
JVM相关笔记-jps
jvm·笔记