小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

new關(guān)鍵字和newInstance()方法的區(qū)別

 yliu277 2019-07-18
類的加載方式不同
    在執(zhí)行Class.forName('a.class.Name')時,JVM會在classapth中去找對應(yīng)的類并加載,這時JVM會執(zhí)行該類的靜態(tài)代碼段。在使用newInstance()方法的時候,必須保證這個類已經(jīng)加載并且已經(jīng)連接了,而這可以通過Class的靜態(tài)方法forName()來完成的。
    使用關(guān)鍵字new創(chuàng)建一個類的時候,這個類可以沒有被加載,一般也不需要該類在classpath中設(shè)定,但可能需要通過classlaoder來加載。
所調(diào)用的構(gòu)造方法不盡相同
    new關(guān)鍵字能調(diào)用任何構(gòu)造方法。
    newInstance()只能調(diào)用無參構(gòu)造方法。
執(zhí)行效率不同
    new關(guān)鍵字是強類型的,效率相對較高。
    newInstance()是弱類型的,效率相對較低。

    既然使用newInstance()構(gòu)造對象的地方通過new關(guān)鍵字也可以創(chuàng)建對象,為什么又會使用newInstance()來創(chuàng)建對象呢?
    假設(shè)定義了一個接口Door,開始的時候是用木門的,定義為一個類WoodenDoor,在程序里就要這樣寫 Door door = new WoodenDoor() 。假設(shè)后來生活條件提高,換為自動門了,定義一個類AutoDoor,這時程序就要改寫為 Door door = new AutoDoor() 。雖然只是改個標(biāo)識符,如果這樣的語句特別多,改動還是挺大的。于是出現(xiàn)了工廠模式,所有Door的實例都由DoorFactory提供,這時換一種門的時候,只需要把工廠的生產(chǎn)模式改一下,還是要改一點代碼。
    而如果使用newInstance(),則可以在不改變代碼的情況下,換為另外一種Door。具體方法是把Door的具體實現(xiàn)類的類名放到配置文件中,通過newInstance()生成實例。這樣,改變另外一種Door的時候,只改配置文件就可以了。示例代碼如下:
String className = 從配置文件讀取Door的具體實現(xiàn)類的類名; 
Door door = (Door) Class.forName(className).newInstance();
    再配合依賴注入的方法,就提高了軟件的可伸縮性、可擴展性。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多