国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java關鍵字new和newInstance的區別方法

2019-11-17 04:34:37
字體:
來源:轉載
供稿:網友
在初始化一個類,生成一個實例的時候,newInstance()方法和new關鍵字除了一個是方法,一個是關鍵字外,最主要有什么區別?它們的區別在于創建對象的方式不一樣,前者是使用類加載機制,后者是創建一個新類。那么為什么會有兩種創建對象方式?這主要考慮到軟件的可伸縮、可擴展和可重用等軟件設計思想。

java中工廠模式經常使用newInstance()方法來創建對象,因此從為什么要使用工廠模式上可以找到具體答案。 例如:

class c = Class.forName(“Example”);

factory = (ExampleInterface)c.newInstance();

其中ExampleInterface是Example的接口,可以寫成如下形式:

String className = "Example";

class c = Class.forName(className);

factory = (ExampleInterface)c.newInstance();

進一步可以寫成如下形式:

String className = readfromxmlConfig;//從xml 配置文件中獲得字符串

class c = Class.forName(className);

factory = (ExampleInterface)c.newInstance();

上面代碼已經不存在Example的類名稱,它的優點是,無論Example類怎么變化,上述代碼不變,甚至可以更換Example的兄弟類Example2 , Example3 , Example4……,只要他們繼承ExampleInterface就可以。

從JVM的角度看,我們使用關鍵字new創建一個類的時候,這個類可以沒有被加載。但是使用newInstance()方法的時候,就必須保證:1、這個類已經加載;2、這個類已經連接了。而完成上面兩個步驟的正是Class的靜態方法forName()所完成的,這個靜態方法調用了啟動類加載器,即加載java API的那個加載器。

現在可以看出,newInstance()實際上是把new這個方式分解為兩步,即首先調用Class加載方法加載某個類,然后實例化。 這樣分步的好處是顯而易見的。我們可以在調用class的靜態加載方法forName時獲得更好的靈活性,提供給了一種降耦的手段。

最后用最簡單的描述來區分new關鍵字和newInstance()方法的區別:

newInstance: 弱類型。低效率。只能調用無參構造。

new: 強類型。相對高效。能調用任何public構造。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁国市| 浦北县| 集贤县| 宁阳县| 正宁县| 宜州市| 南汇区| 临泽县| 喜德县| 宁夏| 呼伦贝尔市| 友谊县| 游戏| 商南县| 封开县| 靖江市| 灵寿县| 盐津县| 新邵县| 中西区| 连平县| 巴青县| 玉环县| 防城港市| 富川| 集安市| 秀山| 宁海县| 文成县| 德清县| 桦甸市| 肥东县| 吴江市| 庄河市| 静乐县| 石河子市| 桂林市| 城步| 梅州市| 黄大仙区| 宁波市|