熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

初始化類時newInstance和new的區別

2022-06-13   來源: JSP教程 

  在初始化一個類生成一個實例的時候newInstance() 和 new 有什麼區別?
  用newInstance與用new是區別的區別在於創建對象的方式不一樣前者是使用類加載機制那麼為什麼會有兩種創建對象方式?這個就要從可伸縮可擴展可重用等軟件思想上解釋了
  Java中工廠模式經常使用newInstance來創建對象因此從為什麼要使用工廠模式上也可以找到具體答案
  例如
  Class c = ClassforName(A);factory = (AInterface)cnewInstance();
  其中AInterface是A的接口如果下面這樣寫你可能會理解
  String className = A;Class c = ClassforName(className);factory = (AInterface)cnewInstance();
  進一步如果下面寫你可能會理解
  String className = readfromXMlConfig;//從xml 配置文件中獲得字符串Class c = ClassforName(className);factory = (AInterface)cnewInstance();
  上面代碼就消滅了A類名稱優點無論A類怎麼變化上述代碼不變甚至可以更換A的兄弟類B C D只要他們繼承Ainterface就可以
   從jvm的角度看我們使用new的時候這個要new的類可以沒有加載
  但是使用newInstance時候就必須保證這個類已經加載這個類已經連接了而完成上面兩個步驟的正是class的靜態方法forName()方法這個靜態方法調用了啟動類加載器(就是加載java API的那個加載器)
  有了上面jvm上的理解那麼我們可以這樣說newInstance實際上是把new這個方式分解為兩步首先調用class的加載方法加載某個類然後實例化
  這樣分步的好處是顯而易見的我們可以在調用class的靜態加載方法forName時獲得更好的靈活性提供給了我們降耦的手段
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19375.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.