游泳的魚

          Class.forName()與new 的區別:

          Class.forName(xxx.xx.xx) 返回的是一個類, .newInstance() 后才創建一個對象 Class.forName(xxx.xx.xx);的作用是要求JVM查找并加載指定的類,也就是說JVM會執行該類的靜態代碼段

          Class aClass = Class.forName(xxx.xx.xx);
          Object anInstance = aClass.newInstance();

          Class.forName("").newInstance()
          返回的是
          object

          but there is some limit for this method to create instance
          that is your class constructor should no contain parameters, and you should cast the instance manually.

           

          下面的例子:Class的最大作用就是實現了動態加載類,為多態提供了很好的幫助。

          class A
          {
              
          void aa()
              
          {
                  System.out.println ("A
          里的");    
                  
              }       
          }
          class B extends A
          {
              
          void aa()
              
          {
                  System.out.println ("B
          里的");    
                  
              }      
          }
          class C extends A
          {
              
          void aa()
              
          {
                  System.out.println ("C
          里的");       
              }     
          }


          public class ClassDemo
          {
              
              
          public static void main(String[] args)
              
          {
                  ClassDemo t=
          new ClassDemo();
                  t.show("C");
              }
              
          void show(String name)
              
          {
                  
          try
                  
          {
                       A show=(A)Class.forName(name).newInstance();
                       show.aa();
                  } 
          catch(Exception e){
                       e.printStackTrace();
                  }
               }
          }

          Class.forName()與new 的區別:

          jvm的角度看,我們使用new的時候,這個要new的類可以沒有加載;
            但是使用newInstance時候,就必須保證:1、這個類已經加載;2、這個類已經連接了。而完成上面兩個步驟的正是class的靜態方法forName()方法,這個靜態方法調用了啟動類加載器(就是加載java API的那個加載器)。
            有了上面jvm上的理解,那么我們可以這樣說,newInstance實際上是把new這個方式分解為兩步,即,首先調用class的加載方法加載某個類,然后實例化。
            這樣分步的好處是顯而易見的。我們可以在調用class的靜態加載方法forName時獲得更好的靈活性,提供給了我們降耦的手段。

          [
          補充:]
          newInstance:
          弱類型低效率,只能調用無參構造。
          new:
          強類型,相對高效,能調用任何public構造。


          posted on 2008-03-19 01:35 閱讀(420) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          留言簿(1)

          我參與的團隊

          文章檔案

          友情鏈接

          搜索

          最新評論

          主站蜘蛛池模板: 甘泉县| 甘肃省| 司法| 澄迈县| 视频| 定远县| 德阳市| 昌平区| 桃江县| 山阳县| 阜阳市| 儋州市| 深州市| 余姚市| 大田县| 华安县| 黑河市| 莆田市| 上虞市| 满洲里市| 林甸县| 准格尔旗| 昌图县| 桃园县| 永德县| 莲花县| 巨鹿县| 乃东县| 海林市| 祁东县| 宁河县| 固镇县| 三台县| 永顺县| 吉木萨尔县| 咸宁市| 广汉市| 西宁市| 肇州县| 卫辉市| 滕州市|