来源:http://www.bjsxt.com/
一、S02E218_01JVM核心机制_类加载全过程、JVM内存分析、反射机制核心原理、常量池理解
二、S02E219_01JVM核心机制_类加载全过程、初始化时机、类的主动引用和被动引用、静态初始化块执行顺序问题
研究类加载全过程:有助于了解JVM运行过程,更深入了解java动态性,(解热部署、动态加载),提高程序的灵活性。
package com.test.classloader;
public class Demo01 {//先静态初始化Object类
static {
System.out.println("静态初始化Demo01");
}
//主动引用,main方法所在的类
public static void main(String[] args) throws Exception {
// System.out.println("Demo01的main方法");
//主动引用,初始化类
// A a = new A();//先静态初始化A_Father,再静态初始化A
// System.out.println(A.width);//类只加载和初始化一次
// A a2 = new A();//类只加载和初始化一次
// Class.forName("com.test.classloader.A");//反射
//被动引用,不会初始化
// System.out.println(A.MAX);//调用类的final常量,类不会被初始化
// A[] as = new A[10];//数组
// System.out.println(B.width);//定义属性的类才会被初始化
}
}
class B extends A {
static {
System.out.println("静态初始化B");
}
}
class A extends A_Father {
public static int width = 100;//静态变量/静态域/field
public static final int MAX = 100;
static {
System.out.println("静态初始化A");
width = 300;
}
public A(){
System.out.println("创建A类的对象");
}
}
class A_Father {
static {
System.out.println("静态初始化A_Father");
}
}