JVM总结二_类的主动使用

本文深入探讨了JVM中类的初始化过程,特别是在类被主动使用时的七种情形,包括创建实例、访问静态成员、调用静态方法等,并通过示例代码展示了类初始化的实际效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.ald.ups;

/**
 * @describe: JVM learning
 * author: liutengyuan
 * @date: Created in 2017/12/4 14:22
 **/
public class MyTest7 {

    /**
     * JVM 规范当设计到类的主动使用时,才去初始化类,由于各个虚拟机的厂商不同,JVM规范中允许在类可能被用到的情况下,可以先去加载类;主动使用的其中情况
     * 类主动使用的七种情况:
     * 1:创建类的实例
     * 2:访问类的或者接口的静态变量,或对类的静态变量进行赋值
     * 3:访问类的静态方法
     * 4:反射
     * 5:初始化一个类的子类
     * 6:java虚拟机启动时,被标明为启动类的类
     * 7:JDK1.7开始提供动态语言的支持(动态代理)
     */

    // 特殊 如果子类调用父类的静态变量或静态方法,都是对父类的主动使用,不涉及到子类的主动使用
    public static void main(String[] args) {
        System.out.println(Child.a);
        System.out.println("-----------");
        Child.doSomething();
    }

}
class Parent{
    static int a = 3;
    static {
        System.out.println("Parent block..");
    }

    static void doSomething(){
        System.out.println("do Something");
    }
}

class Child extends Parent{
    static {
        System.out.println("Child Block..");
    }
}

运行结果:

D:\Java\jdk1.8\bin\java.exe -javaagent:D:\IDEA\idea\lib\idea_rt.jar=55847:D:\IDEA\idea\bin -Dfile.encoding=UTF-8 -classpath D:\Java\jdk1.8\jre\lib\charsets.jar;D:\Java\jdk1.8\jre\lib\deploy.jar;D:\Java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\Java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\Java\jdk1.8\jre\lib\ext\dnsns.jar;D:\Java\jdk1.8\jre\lib\ext\jaccess.jar;D:\Java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\Java\jdk1.8\jre\lib\ext\localedata.jar;D:\Java\jdk1.8\jre\lib\ext\nashorn.jar;D:\Java\jdk1.8\jre\lib\ext\sunec.jar;D:\Java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\Java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\Java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\Java\jdk1.8\jre\lib\ext\zipfs.jar;D:\Java\jdk1.8\jre\lib\javaws.jar;D:\Java\jdk1.8\jre\lib\jce.jar;D:\Java\jdk1.8\jre\lib\jfr.jar;D:\Java\jdk1.8\jre\lib\jfxswt.jar;D:\Java\jdk1.8\jre\lib\jsse.jar;D:\Java\jdk1.8\jre\lib\management-agent.jar;D:\Java\jdk1.8\jre\lib\plugin.jar;D:\Java\jdk1.8\jre\lib\resources.jar;D:\Java\jdk1.8\jre\lib\rt.jar;D:\develop26\jvm_demo\target\classes com.ald.ups.MyTest7
Parent block..
3
-----------
do Something

Process finished with exit code 0

打印类的加载信息:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值