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綜合


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


          網站導航:
           
          主站蜘蛛池模板: 岳池县| 合水县| 灵台县| 砀山县| 德清县| 阿图什市| 广州市| 大悟县| 肃南| 那坡县| 遵化市| 调兵山市| 梧州市| 罗平县| 平凉市| 沧源| 宁阳县| 封开县| 屏山县| 张家界市| 南部县| 清远市| 饶平县| 罗山县| 福鼎市| 化德县| 兰州市| 托克逊县| 河东区| 大新县| 中江县| 永新县| 灵寿县| 丹江口市| 稷山县| 平顶山市| 夏河县| 屏边| 开原市| 上杭县| 湖北省|