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 翰林 閱讀(348) 評論(0)  編輯  收藏 所屬分類: J2SE綜合


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


          網站導航:
           
          主站蜘蛛池模板: 全南县| 探索| 务川| 肃南| 信宜市| 苏尼特右旗| 台中县| 澜沧| 池州市| 娄底市| 项城市| 耒阳市| 开封市| 青冈县| 翁牛特旗| 灵武市| 和田县| 安化县| 滕州市| 无极县| 大邑县| 友谊县| 普洱| 萍乡市| 嘉峪关市| 舟山市| 龙陵县| 仙居县| 黄梅县| 宝兴县| 盐山县| 朝阳市| 建始县| 马龙县| 德钦县| 万山特区| 天镇县| 石家庄市| 永清县| 紫云| 呼图壁县|