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介面,然後重寫其中的方法即可。