java代碼:?

public interface Assembly{
? ? publicvoid start();
}

publicclass Word implements Assembly{
? ? static{
? ? ? ? System.out.println("Word static initialization!");
? ? }? ?

? ? public? void start(){
? ? ? ? System.out.prinlnt("Word starts");
? ? }
}

publicclass Office{
? ? publicstaticvoid main(String args[])throwsException{
? ? ? ? Office off = new Office();
? ? ? ? System.out.println("類別準備載入");
? ? ? ? Class c = Class.forName(arg[0],true,Office.class.getClassLoader());
? ? ? ? System.out.println("類別準備實例化");
? ? ? ? Object o = c.newInstance();
? ? ? ? Object o2= c.newInstance();
? ?}
}

forName方法中的第二參數是true時,顯示的是:
類別準備載入
Word static initialization!
類別準備實例化
forName方法中的第二參數是false時,顯示的是:
類別準備載入
類別準備實例化
Word static initialization!

當true的時候是主動使用,當fasle的時候是被動使用.
在P162說:java虛擬機在首次使用類型時初始化它們。只有6種活動被認為是主動使用:創建類的新實例,調用類中聲明的靜態方法,操作類或者接口中聲明的非常量靜態字段,調用Java API中特定的反射方法,初始化一個類的子類,以及指定一個類作為Java虛擬機啟動時的初始化類。

Class c = Class.forName(arg[0],true,Office.class.getClassLoader())
; 中的 Office,改成Word,不管forName的第二參數是否是fasle與true,都是
類別準備載入
Word static initialization!
類別準備實例化