類加載完成后并沒有立即執行靜態初始化代碼,而是到了實例化的時候才進行了靜態初始化。有時候我們會說靜態代碼是在類第一次被加載時執行的,并且只執行一次。其實這是對與new一個對象,第一次訪問類的靜態代碼以及第二個參數為true時而言的,對于動態的加載來說,如果forName方法的第二個參數設置為false,那么就是在實例化的時候才會執行靜態初始化。當然默認情況下第二個參數是true.
第二種方法:利用Class對象獲取的ClassLoader裝載。
下面是一個簡單的例子:
java 代碼//Example 2.2 //Zoo.java abstract class Animal { static { System.out.println("Animal static code block "); } Animal(){ System.out.println("Animal constructor"); } } class Tiger extends Animal { Tiger(){ System.out.println("Tig constructor "); } } class Dog extends Animal { Dog(){ System.out.println("Dog Constructor "); } } public class Zoo { public static void main(String [] args)throws Exception { Class c = Zoo.class; ClassLoader loader = c.getClassLoader(); System.out.println("loader before"); Class dog = loader.loadClass("Dog"); System.out.println("instance before "); Animal an = (Animal)dog.newInstance(); } }
文章來源于領測軟件測試網 http://www.kjueaiud.com/