Class.forName("package.class")的意義

          java里面任何class都要裝載在虛擬機上才能運行。Class.forName(xxx.xx.xx)就是裝載類用的(和new 不一樣,要分清楚),裝載后jvm將執行類中的靜態代碼。

          至于什么時候用,可以考慮一下這個問題,給你一個字符串變量,它代表一個類的包名和類名,你怎么實例化它?只有用提到的這個方法了,不過要再加一點。
          A a = (A)Class.forName("pacage.A").newInstance();
          這和
          A a = new A();
          是一樣的效果。

          有的jdbc連接數據庫的寫法里是Class.forName(xxx.xx.xx);而有一些是Class.forName(xxx.xx.xx).newInstance(),為什么會有這兩種寫法呢?

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

          在JDBC規范中明確要求這個Driver類必須向DriverManager注冊自己,即任何一個JDBC Driver的Driver類的代碼都必須類似如下:
          public class MyJDBCDriver implements Driver {
          static {
          DriverManager.registerDriver(new MyJDBCDriver());
          }
          }

          所以我們在使用JDBC時只需要Class.forName(XXX.XXX);就可以了

          we just want to load the driver to jvm only, but not need to user the instance of driver, so call Class.forName(xxx.xx.xx) is enough, if you call Class.forName(xxx.xx.xx).newInstance(), the result will same as calling Class.forName(xxx.xx.xx), because Class.forName(xxx.xx.xx).newInstance() will load driver first, and then create instance, but the instacne you will never use in usual, so you need not to create it.

          在JDBC驅動中,有一塊靜態代碼,也叫靜態初始化塊,它執行的時間是當class調入到內存中就執行(你可以想像成,當類調用到內存后就執行一個方法)。所以很多人把jdbc driver調入到內存中,再實例化對象是沒有意義的。

           

          posted on 2008-06-12 14:51 chenkai 閱讀(281) 評論(0)  編輯  收藏


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


          網站導航:
           
          <2008年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 河西区| 成都市| 巴林右旗| 贵阳市| 迁西县| 南宁市| 常州市| 蓬莱市| 台前县| 大化| 兴安县| 尉氏县| 黄龙县| 顺昌县| 门源| 株洲县| 博罗县| 梁平县| 康乐县| 铅山县| 天台县| 邮箱| 辽中县| 长乐市| 永平县| 高要市| 漾濞| 昌平区| 石家庄市| 双江| 富民县| 临清市| 钦州市| 栾城县| 固原市| 苍梧县| 抚顺市| 大姚县| 永和县| 古蔺县| 津南区|