在初始化一個類
生成一個實例的時候
newInstance() 和 new 有什麼區別?
用newInstance與用new是區別的
區別在於創建對象的方式不一樣
前者是使用類加載機制
那麼為什麼會有兩種創建對象方式?這個就要從可伸縮
可擴展
可重用等軟件思想上解釋了
Java中工廠模式經常使用newInstance來創建對象
因此從為什麼要使用工廠模式上也可以找到具體答案
例如
Class c = Class
forName(
A
);factory = (AInterface)c
newInstance();
其中AInterface是A的接口
如果下面這樣寫
你可能會理解
String className =
A
;Class c = Class
forName(className);factory = (AInterface)c
newInstance();
進一步
如果下面寫
你可能會理解
String className = readfromXMlConfig;//從xml 配置文件中獲得字符串Class c = Class
forName(className);factory = (AInterface)c
newInstance();
上面代碼就消滅了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