來源: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");
}
}