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 閱讀(277) 評論(0)  編輯  收藏


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


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

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 沈阳市| 玉田县| 石首市| 乐至县| 嘉鱼县| 马公市| 巴马| 南丰县| 都匀市| 大荔县| 元朗区| 应用必备| 荣成市| 洛阳市| 宜宾县| 琼结县| 育儿| 酉阳| 花莲市| 洛扎县| 锡林郭勒盟| 永顺县| 临泉县| 杭锦旗| 大名县| 云南省| 井冈山市| 东台市| 鄯善县| 青冈县| 绿春县| 饶阳县| 井冈山市| 玛多县| 增城市| 临夏县| 德州市| 麻栗坡县| 怀柔区| 安吉县| 洪湖市|