Class.forName("類的全稱")
Class.forName("類的全稱")不僅僅代表類的類類型 還代表了動态加載類
動态加載和靜态加載
編譯時刻加載類是靜态加載類、運作時刻加載類是動态加載類 注意:區分編譯 運作的差別
靜态加載
new 類的執行個體對象 是編譯時刻的靜态加載類
運作時刻
public class Office {
public static void main(String[] args) {
if(("Word").equals(args[0])){
Word w=new Word();
w.start();
}
if(("Excel").equals(args[0])){
Excel w=new Excel();
w.start();
}
}
}
編譯的時候,類找不到,方法找不到 ,編譯不通過
Word 不一定用 ,Excel不一定用
存在word ,但還是用不了,因為我們類是做靜态加載 編譯時刻就需要加載所有可能使用到的類 但是其中有一個不存在或者錯誤 就無法編譯通過
動态加載類 (不能因為一個影響所有)
如果我們需要存在一個功能就用一個功能呢 ?而不是一個功能有問題,其他功能就無法使用?
是以我們需要動态加載類,在運動時加載,
動态加載類的方法
Class.forName("類的全名")
使用原則: 功能性的類使用動态加載
使用技巧
相同的功能 使用接口去指定标準,比如PPT ,EXCEL ,Word
package com.javatest;
public interface Officeable {
public void start();
}
package com.javatest;
public class Word implements Officeable{
@Override
public void start() {
System.out.println("Excel ");
}
}
package com.javatest;
public class Office {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
String str="Excel";
if(("Word").equals(str)){
Word w=new Word();
w.start();
}
if(("Excel").equals(str)){
Class c1= Class.forName("com.javatest.Excel");
Officeable e=(Officeable)c1.newInstance();
}
}
}
版權聲明:本文為CSDN部落客「weixin_34365635」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/weixin_34365635/article/details/91875071