1.Java動態載入類別和靜態載入類別的區別
new建立物件的方式稱為靜態加載,而使用Class.forName(" XXX")稱作為動態加載,它們兩個本質的區別在於靜態加載的類別的原始程式在編譯時期加載(必須存在),而動態加載的類別在編譯時期可以缺席(原始程式不必存在)。
2.為什麼需要動態載入類別
對於我自己的理解,動態載入類別增加了程式的彈性。例如一個程式中有50個功能,但你可能只會使用其中的一個,如果你用的是靜態載入的方式,你必須在編譯前提供100個功能的所有定義,否則無法編譯通過,若你使用的是動態載入機制,則不需要這麼大費周章,用哪一個就定義哪一個就好。
靜態載入:
public class Office_Static { public static void main(String[] args) { //new 创建对象,是静态加载类,在编译时刻就需要加载所有的可能使用到的类 if("Word".equals(args[0])){ Word w = new Word(); w.start(); } if("Excel".equals(args[0])){ Excel e = new Excel(); e.start(); } } }
這個程式編譯時必須有Word和Excel這兩個類別存在才行,即使判斷後用不到Excel也要載入
動態載入:
#1、介面OfficeAble :
public interface OfficeAble { public void start(); }
2、Word實作介面:
public class Word implements OfficeAble{ public void start(){ System.out.println("word start"); } }
3、Excel實作介面:
public class Excel implements OfficeAble{ public void start(){ System.out.println("excel start"); } }
4、Main方法
public class OfficeBetter { public static void main(String[] args) { try { //动态加载类,在运行时刻加载 Class c = Class.forName(args[0]);//在运行配置里面输入加载类.Excel //通过类类型,创建该类对象(先转换为Word和Excel的共同接口OfficeAble) OfficeAble oa = (OfficeAble)c.newInstance(); oa.start(); //不推荐下面两种,因为不确定是加载Word还是Excel,要强转 // Word word = (Word)c.newInstance(); // word.start(); // Excel excel = (Excel)c.newInstance(); // excel.start(); } catch (Exception e) { e.printStackTrace(); } } }
以上是Java如何實作反射靜態載入和動態載入實例程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!