JAVA的newInstance()和new的區別(JAVA反射機制,通過類名來獲取該類的例項化物件)
阿新 • • 發佈:2019-02-11
newInstance()是實現IOC、反射、面對介面程式設計 和 依賴倒置 等技術方法的必然選擇,new 只能實現具體類的例項化,不適合於介面程式設計。
裡面就是通過這個類的預設建構函式構建了一個物件,如果沒有預設建構函式就丟擲InstantiationException, 如果沒有訪問預設建構函式的許可權就丟擲IllegalAccessException
//通過反射獲取該類的例項化物件,並由介面來呼叫該類的方法
這樣實現的好處就是如果也有一個classB類實現了這個介面的方法。
直接把
反射的各種應用:參考這個連結
裡面就是通過這個類的預設建構函式構建了一個物件,如果沒有預設建構函式就丟擲InstantiationException, 如果沒有訪問預設建構函式的許可權就丟擲IllegalAccessException
public interface duang {
public String getClazzName();
}
public class classA implements duang{ @Override public String getClazzName() { return "A類"+this.getClass().getName(); } }
public class classD { public static void main(String[] args) { // System.out.println(classA.getClazzName()); try { Class clazz = Class.forName("classA"); duang duang = (duang) clazz.newInstance(); System.out.println(duang.getClazzName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
//通過反射獲取該類的例項化物件,並由介面來呼叫該類的方法
這樣實現的好處就是如果也有一個classB類實現了這個介面的方法。
public class classB implements duang{
@Override
public String getClazzName() {
return "B類"+this.getClass().getName();
}
}
直接把
Class clazz = Class.forName("classA");
換成Class clazz = Class.forName("classB");
反射的各種應用:參考這個連結