標籤:start nbsp cat 而且 stat string example stack oid
在Java當中,載入類分為動態載入和靜態載入,其中,在編譯時間刻載入類叫做靜態載入類,在運行時刻載入類叫做動態載入類。
產生Class對象的方式中,有一個是Class.forName("類的全稱"),這個不僅僅表示類的類類型,而且還表示了動態載入類。
1 package com.example.demo; 2 3 public class Demo { 4 public static void main(String[] args) { 5 if (args[0].equals("word")) { 6 Word word = new Word(); 7 word.start(); 8 } 9 if (args.equals("Excel")) {10 Excel excel = new Excel ();11 excel.start();12 }13 }14 }
比如說如上代碼:如果我們不建立Word類和Excel類的話,我們會發現這段代碼不能通過編譯,這是因為new方式建立對象是通過靜態載入類的,在編譯的時候把所有可能要用到的類載入進來,不論以後到底用不用它。這種方式有一個弊端:那就是我們必須把所有可能到的類載入進來,一旦發現有一個類沒有被載入進來,其他的類就不能使用。
而動態載入則是,需要使用哪個類,我們就載入哪個類,不必要把所有的類載入進來。
1 try {2 //動態載入類,在運行時刻進行載入,編譯不會報任何錯誤3 Class c1 = Class.forName(args[0]);4 //通過類類型來建立類的對象--我想要載入的類必須都符合一個標準,也就是說要實現統一的介面5 OfficeAble officeAble = (OfficeAble)c1.newInstance();6 } catch (ClassNotFoundException e) {7 // TODO Auto-generated catch block8 e.printStackTrace();9 }
Java-反射之動態載入類