天天看點

newInstance()與new的差別

第一點:類加載方式不一樣

newInstance()是一個方法,而new是關鍵字。

使用newInstance時候,就必須保證:1、這個類已經加載;2、這個類已經連接配接了。而完成上面兩個步驟的正是Class的靜态方法forName(),這個靜态方法調用了啟動類加載器(就是加載java API的那個加載器)。 這裡涉及到了Java的類加載,不太清楚的可以看這裡Java類加載原理

使用關鍵字new建立一個類的時候,這個類可以沒有被加載。

第二點:構造方法不同

new關鍵字能調用任何構造方法。

newInstance()隻能調用無參構造方法。

第三點:執行效率不同

new關鍵字是強類型的,效率相對較高。

newInstance()是弱類型的,效率相對較低。

注意:

Java中工廠模式經常使用newInstance()方法來建立對象,其中ExampleInterface是Example的接口,可以寫成如下形式:

String className = "Example";
class c = Class.forName(className);
factory = (ExampleInterface)c.newInstance();