1. 程式人生 > >java動態載入類

java動態載入類

//new建立物件是靜態載入類,在編譯時刻就需要載入所有的可能用到的類。而通過動態載入類可以解決此問題

class office{
    
    public static void main(String[] args){
        
        if("word".equals(args[0])){
            Word word=    new Word();
            word.start();        
        }
        if("excel".equals(args[0])){
            Excel excel=new Excel();
            excel.start();
            
        }
        
    }
}

//以上程式碼在編譯時就會報錯,因為找不到Word類和Excel類以及其各自的 start()方法.

//若存在一個Word類,我們編譯器還是不會通過編譯,因為它會報沒有Exce這個類l

class Word {
    
    public void start(){
        System.out.println("java-word");
    }
}

//而現在我們想的是,因為有word類已經存在,當我們傳的引數是Word時想讓程式執行下去,輸出相應得內容,顯然採用上面靜態載入類的方式是不可能實現的,這時候就需要採用動態載入類的方式。如下

class officeBetter{

public static void main(String[] args){
try{

//採用Class.forName(args[0])此種方式

Class c=Class.forName(args[0]);

//使用c.newInstance();例項化物件返回的是相應得物件,因為如果傳入的命令列引數是Word的話,例項化的就是Word物件,而如果傳入的是Excel,則例項化的物件就是Excel物件,所以此時返回的例項物件不能確定,那麼這種情況就應該用一個公用的類,然後讓Word類和Excel類實現介面自然就可以根據動態傳入的命令列引數,例項化相應得物件了。

officeAble a=(officeAble)c.newInstance();
a.start();
}catch(Exception e){
e.printStackTrace();
}
}
}

Word類:

class Word implements officeAble{
    
    public void start(){
        System.out.println("java-word");
    }
}

Excel類:

class Excel implements officeAble{

public void start(){
System.out.println("excel-start");
}

}

//如此以來程式也會變得比較耦合,也很容易擴充套件,如果再有一個其他的ppt類,就很容易實現了,只要ppt類實現officeAble介面,然後重寫其中的方法即可。