2012-10-16 63 views
3

Class.forName用於實例化驅動程序類。 Class.forName沒有對象,它只是實例化驅動程序類實例。如果是這種情況,DriverManager類將如何獲取實例化驅動程序類的引用?DriverManager如何獲取jdbc驅動程序類的實例

+2

不過請注意,這是沒有必要的JDBC 4.0驅動程序,因爲他們應該通過META-INF /服務註冊自己:HTTP://文檔.oracle.com/javase/7/docs/api/java/sql/DriverManager.html – Puce

回答

2

的Class.forName 負載和註冊驅動程序( 「X」)導致名爲X到類動態加載, 基本上,對forName(「X」)的調用會導致名爲X的類被初始化(即,JVM在類加載後執行其所有靜態塊)。

要回答你的問題JVM執行靜態塊和驅動程序本身向DriverManager註冊。

此過程在下面的鏈接很好解釋: http://www.xyzws.com/Javafaq/what-does-classforname-method-do/17

+0

鏈接很好的解釋了靜態塊,謝謝。 – cherit

0

javadoc

當getConnection方法被調用時,DriverManager的將 試圖從在那些在 初始化加載和那些加載明確地使用相同的類加載器 作爲現行小應用程序定位一個合適的驅動程序或應用。在初始化:: DriverManager類加載

驅動程序將嘗試通過調用Class.forName加載在「jdbc.drivers中」系統屬性中引用的驅動程序類

驅動程序顯式加載::(「driver.name」 );

0

請參閱接口的javadoc

它說,

當一個驅動程序類被加載,它應該創建自己 一個實例並用DriverManager註冊。這意味着用戶可以通過調用

的Class.forName( 「foo.bah.Driver」)