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

    }
}

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

常量的产生时机

小测试

相关推荐
2301_776508721 分钟前
使用Python处理计算机图形学(PIL/Pillow)
jvm·数据库·python
2501_945424805 分钟前
实战:用Python开发一个简单的区块链
jvm·数据库·python
茶本无香18 分钟前
JVM调优介绍 + 面试题标准答案(高级)
java·jvm·面试
2301_7765087223 分钟前
使用PyQt5创建现代化的桌面应用程序
jvm·数据库·python
2501_945424801 小时前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
njidf1 小时前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python
南梦浅1 小时前
网站redis从开发到部署方案
java·jvm·redis
阿kun要赚马内1 小时前
操作系统:线程与进程
java·开发语言·jvm
wangchunting2 小时前
Jvm-垃圾回收算法
java·jvm·算法
耶叶2 小时前
Android开发实战:通过网络电子书阅读器实践运用fragment知识
android·jvm