JVM总结二_类的主动使用

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

打印类的加载信息:
JVM总结二_类的主动使用