Java中new和newInstance的區別

2021-06-09 06:57:54 字數 1076 閱讀 9910

1、類的載入方式不同

在執行class.forname("a.class.name")時,jvm會在classapth中去找對應的類並載入,這時jvm會執行該類的靜態**段。在使用newinstance()方法的時候,必須保證這個類已經載入並且已經連線了,而這可以通過class的靜態方法forname()來完成的。

使用關鍵字new建立乙個類的時候,這個類可以沒有被載入,一般也不需要該類在classpath中設定,但可能需要通過classlaoder來載入。

2、所呼叫的構造方法不盡相同

new關鍵字能呼叫任何構造方法。

newinstance()只能呼叫無參構造方法。

3、執行效率不同

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

newinstance()是弱型別的,效率相對較低。

既然使用newinstance()構造物件的地方通過new關鍵字也可以建立物件,為什麼又會使用newinstance()來建立物件呢?

假設定義了乙個介面door,開始的時候是用木門的,定義為乙個類woodendoor,在程式裡就要這樣寫 door door = new woodendoor() 。假設後來生活條件提高,換為自動門了,定義乙個類autodoor,這時程式就要改寫為 door door = new autodoor() 。雖然只是改個識別符號,如果這樣的語句特別多,改動還是挺大的。於是出現了工廠模式,所有door的例項都由doo***ctory提供,這時換一種門的時候,只需要把工廠的生產模式改一下,還是要改一點**。

而如果使用newinstance(),則可以在不改變**的情況下,換為另外一種door。具體方法是把door的具體實現類的類名放到配置檔案中,通過newinstance()生成例項。這樣,改變另外一種door的時候,只改配置檔案就可以了。示例**如下:

string classname = 從配置檔案讀取door的具體實現類的類名; 

door door = (door) class.forname(classname).newinstance();

再配合依賴注入的方法,就提高了軟體的可伸縮性、可擴充套件性。

java中的new與newInstance區別

newinstance例子 string classname 類名稱 class classxml class.forname classname domxml dx domxml classxml.newinstance string classname domxml class classxml...

java使用new物件和 的區別

前言 簡單說明一下new物件和 物件的區別 先說一下 string a test 1 string b new string test 2的區別吧 1這種方式jvm會先去共享的字串池中查詢,有沒有 test 這個詞,如果有直接返回它的引用 如果沒有,就會建立這個物件,再返回,因此,a b 相當於存在...

java中new乙個物件和物件 null有什麼區別

今天在寫 時,遇到乙個問題,特此進行記錄。for profiledto profiledto profile 今天在寫這段 時,起初是profile resprofile null 然後debug走到複製屬性方法的時候,就直接跳出了,然後改為new的方式就ok了。所以就很好奇,對此特地進行研究和總結...