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

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

初始化類時(shí)newInstance和new的區(qū)別

2019-11-18 13:15:48
字體:
供稿:網(wǎng)友

  在初始化一個(gè)類,生成一個(gè)實(shí)例的時(shí)候;newInstance() 和 new 有什么區(qū)別?
  用newInstance與用new是區(qū)別的,區(qū)別在于創(chuàng)建對(duì)象的方式不一樣,前者是使用類加載機(jī)制,那么為什么會(huì)有兩種創(chuàng)建對(duì)象方式?這個(gè)就要從可伸縮、可擴(kuò)展,可重用等軟件思想上解釋了。
  java中工廠模式經(jīng)常使用newInstance來創(chuàng)建對(duì)象,因此從為什么要使用工廠模式上也可以找到具體答案。
  例如:
  Class c = Class.forName(“A”);factory = (AInterface)c.newInstance();
  其中AInterface是A的接口,假如下面這樣寫,你可能會(huì)理解:
  String className = "A";Class c = Class.forName(className);factory = (AInterface)c.newInstance();
  進(jìn)一步,假如下面寫,你可能會(huì)理解:
  String className = readfromxmlConfig;//從xml 配置文件中獲得字符串Class c = Class.forName(className);factory = (AInterface)c.newInstance();
  上面代碼就消滅了A類名稱,優(yōu)點(diǎn):無(wú)論A類怎么變化,上述代碼不變,甚至可以更換A的兄弟類B , C , D....等,只要他們繼續(xù)Ainterface就可以。
   從jvm的角度看,我們使用new的時(shí)候,這個(gè)要new的類可以沒有加載;
  但是使用newInstance時(shí)候,就必須保證:1、這個(gè)類已經(jīng)加載;2、這個(gè)類已經(jīng)連接了。而完成上面兩個(gè)步驟的正是class的靜態(tài)方法forName()方法,這個(gè)靜態(tài)方法調(diào)用了啟動(dòng)類加載器(就是加載java API的那個(gè)加載器)。
  有了上面jvm上的理解,那么我們可以這樣說,newInstance實(shí)際上是把new這個(gè)方式分解為兩步,即,首先調(diào)用class的加載方法加載某個(gè)類,然后實(shí)例化。
  這樣分步的好處是顯而易見的。我們可以在調(diào)用class的靜態(tài)加載方法forName時(shí)獲得更好的靈活性,提供給了我們降耦的手段。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 湘乡市| 灌南县| 彰化县| 抚宁县| 岑巩县| 商丘市| 政和县| 伊通| 桦川县| 贵州省| 康保县| 石楼县| 克什克腾旗| 色达县| 神木县| 丹凤县| 兰州市| 吉安市| 河池市| 农安县| 民乐县| 永顺县| 玉山县| 密云县| 蒙阴县| 东兰县| 宣汉县| 全椒县| 康马县| 浑源县| 彰化县| 志丹县| 焦作市| 卫辉市| 星子县| 陵川县| 普宁市| 大安市| 平湖市| 衡阳县| 汶上县|