當我們注釋掉Example.1.1行時,運行Example1.2行,結果如下:
Example 1.2
分析以上兩圖的運行結果我們可以看出:當我們將子類對象賦值給父類時,編譯器會做一點優化,于是加載器在還沒有new 子類對象的時候已經加載了父類以及子類(example1.1結果),當不存在多態的時候,我們可以看到是當要new Dog()的時候才會加載Dog以及父類。無論何種方式,在new之前,類確實已經加載到了內存中。
JAVA為我們提供了兩種動態機制。第一種是隱式機制。其實new一個對象和調用類的靜態方法時,就是隱式機制在工作。第二種是顯示機制。顯示的機制又有兩種策略(第一種是用java.lang.Class的forName(String str)方法,第二種是用java.lang.ClassLoader的loadClass())。
第一種:利用forName方法
當我們查API文檔就會發現forName方法有兩種形式。分別如下:
public static Class<?> forName(String className) throws ClassNotFoundException public static Class<?> forName(String name, boolean initialize, ClassLoader loader) throws ClassNotFoundException
文章來源于領測軟件測試網 http://www.kjueaiud.com/