JDBC連線中Class.forName("")到底幹了什麼?

x號開發者發表於2019-03-10

思考了一個問題,Class.forName("***");到底幹了什麼?

我們知道Class.forName( )靜態方法的目的是為了動態載入類,但是一般來說,一個類forName只是要求JVM查詢並載入指定的類,最終的目的是要newInstance()去把它例項化物件的,但是這裡並沒有,那它的作用是什麼?

其實在JVM載入指定類的過程中,如果類中有靜態初始化內容的話,JVM就會執行該部分程式碼,於此同時JDBC規範要求任何一個driver類必須向DriverManger類去註冊自己,也就是說此例中載入的com.mysql.jdbcDriver中一定是有一段程式碼類似

static {
try {
DriverManager.registerDriver(new ***Driver());
} catch (SQLException e) {
System.out.println(e.toString());
}
}

  


所以在這裡只需要forName就行了並不需要newInstance,因為我們真正需要的其實就是上述向DriverManager註冊自己的過程。破案。
---------------------
作者:擼蛇
來源:CSDN
原文:https://blog.csdn.net/weixin_40887477/article/details/81745976
版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關文章