以前都是照本宣科,網上怎麼寫鏈接mysql 就抄過來。。今天覺得無聊,自己看了看mysql driver的源碼類。具體瞭解下其工作原理:
首先class.forname(String className) 這個方法會調用相應的class進行類初始化,一般在java中如果初始化一個類,我們需要對這個類進行實例化,也就是new class()方法。反射也提供這一方式:class.forClass(classname).newInstance(), 這樣會初始化一個無參的構造函數。 那麼這樣是不是初始化jdbc時應寫成:
class.forname("com.mysql.jdbc.Driver").newInstance() ?
測試這樣寫,是OK的。但是爲什麼class.forname("com.mysql.jdbc.Driver") 不實例化對象也可以使用?
其主要原因就是在驅動類中, java doc中任何一個驅動類都需要implements Driver 並且在static 方法中去,註冊driver到 driverManager。
com.mysql.jdbc.Driver 的源碼:
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can\'t register driver!");
}
}
}
以後別寫class.forname("com.mysql.jdbc.Driver").newInstance() 啦~。