new關鍵字和newInstance 方法的區別

2021-08-14 09:13:33 字數 1036 閱讀 6880

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();

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

**:

new關鍵字 this關鍵字 base關鍵字

使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...

new 和 delete關鍵字

一 在了解new和delete之前我們先回顧一下c語言中malloc和free的用法。malloc 用來在堆上動態開闢記憶體 free 釋放記憶體 二 現在我們來簡單了解一下new和delete的用法 new 用來動態開闢記憶體 也可做初始化 delete 用來釋放空間和資源 三 c 中new與c中...

關鍵字new和instanof(PHP)

物件是類的例項,可以使用new關鍵字建立物件。instancof關鍵字可以用來檢測某個物件是否屬於某個類,返回值為布林值。例如 xx instanceof user 注意 如果建立類中的建構函式包含引數,則在建立物件時也需要提供相應的引數。class user function destruct f...