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

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

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

2019-11-17 04:17:39
字體:
來源:轉載
供稿:網友

  在初始化一個類,生成一個實例的時候,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構造。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 油尖旺区| 剑川县| 重庆市| 兴义市| 茂名市| 凌源市| 本溪市| 鸡东县| 北碚区| 汽车| 驻马店市| 东安县| 新宁县| 东山县| 尚义县| 修文县| 文登市| 扎囊县| 辽阳县| 涪陵区| 巧家县| 磴口县| 沙洋县| 梁平县| 泰安市| 滨海县| 内乡县| 东阳市| 弋阳县| 灌云县| 白玉县| 天全县| 浠水县| 纳雍县| 巴林左旗| 蓝田县| 高碑店市| 渑池县| 尚志市| 邮箱| 贡觉县|