class.forName()
public static Class<?> forName(String className) throws ClassNotFoundException
- 返回與帶有給定字符串名的類或接口相關聯的
Class
對象。 - 調用 forName("X") 將導致命名爲 X 的類被初始化。
public T newInstance() throws InstantiationException, IllegalAccessException
- 創建此 Class 對象所表示的類的一個新實例。如同用一個帶有一個空參數列表的
new
表達式實例化該類。如果該類尚未初始化,則初始化這個類。注意,此方法傳播 null 構造方法所拋出的任何異常,包括已檢查的異常。使用此方法可以有效地繞過編譯時的異常檢查,而在其他情況下編譯器都會執行該檢查。
Constructor.newInstance
方法將該構造方法所拋出的任何異常包裝在一個(已檢查的)InvocationTargetException
中,從而避免了這一問題。 - 返回:
- 此對象所表示的類的一個新分配的實例。
- newInstance實際上是把new這個方式分解爲兩步,即,首先調用class的加載方法加載某個類,然後實例化。這樣分步的好處是顯而易見的。我們可以在調用class的靜態加載方法forName時獲得更好的靈活性,提供給了我們降耦的手段。[補充:]newInstance: 弱類型。低效率。只能調用無參構造。new: 強類型。相對高效。能調用任何public構造。