2012-07-17 215 views
1

可能重複:
What is difference between 「Class.forName()」 and 「Class.forName().newInstance()」?這兩個聲明有什麼區別?

在我的Android應用使用JDBC連接來連接MySQL服務器。在此我想知道的區別

`Class.forName("com.mysql.jdbc.Driver");` 

Class.forName("com.mysql.jdbc.Driver").newInstance(); 

以及如何設置超時功能,沒有連接服務器的時候?

+0

請點擊這裏http://stackoverflow.com/questions/2092659/what-is-difference-between-class-forname-and-class-forname-newinstance – Nikhil 2012-07-17 07:05:21

+0

檢查此鏈接 的http://計算器.COM /問題/ 2092659 /什麼 - 是差之間-類的forName和-類的forName-的newInstance – 2012-07-17 07:05:56

回答

3

Class.forName()返回一個Class對象 - 一個表示特定Java類的對象。

newInstance() - java.lang.Class的一個方法 - 將使用表示類的無參數構造函數來創建該類的一個實例。

對於你的問題:(從http://www.coderanch.com/t/385654/java/java/Difference-between-Class-forName-Class參考)

Class.forName()到達一類的引用,Class.forName().newInstance()嘗試使用無參數的構造函數的類返回一個新的實例。到目前爲止沒有驚喜。 Class.forName()的另一個常見用途是使Class被加載,因爲某些類的類具有來自加載進程的副作用,這是其他用途所必需的。 JDBC是此進程的一個大用戶,因爲驅動程序類在加載時需要向DriverManager類註冊。

在Java的黑暗日子裏,可能是v1.1.8,但可能高達Java 1.2,但有一個問題,即默認的ClassLoader在創建實例之前不會加載類。在這些情況下,如果您使用的是Class.forName()而不是Class.forName().newInstance(),則JDBC代碼將失敗。

雖然newInstance()會創建一個立即丟棄的實例,但需要使Class.forName()正常工作。這個解決方法不再需要。