jbrg2008

          人以銅為鏡,可以正衣冠;以古為鏡,可以見興替;以人為鏡,可以知得失.

          Class.forName的含義

                 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

          例:
          Class Driver{
          protected static Driver current;
          public static Driver getDriver(){
          return current;
          }
          }

          Class MyDriver extends Driver{
          static{
          Driver.current=new MyDriver();
          }
          MyDriver(){}
          }

          用時:
          Class.forName("MyDriver");
          Driver d=Driver.getDriver();

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

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

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

          posted on 2008-01-08 08:25 翰林 閱讀(350) 評論(0)  編輯  收藏 所屬分類: J2SE綜合


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


          網站導航:
           
          主站蜘蛛池模板: 会宁县| 怀化市| 辛集市| 军事| 松滋市| 屯昌县| 广安市| 万宁市| 阿拉善左旗| 周宁县| 高清| 尼木县| 青冈县| 迭部县| 寻乌县| 银川市| 拉孜县| 武强县| 嘉鱼县| 筠连县| 平果县| 台湾省| 延寿县| 许昌县| 简阳市| 巫溪县| 平谷区| 会理县| 玛多县| 桐柏县| 海盐县| 固安县| 新余市| 赣榆县| 历史| 许昌县| 赫章县| 杭锦旗| 静宁县| 揭东县| 沧源|