Class.forName(xxx.xx.xx) 返回的是一個(gè)類(lèi), .newInstance() 后才創(chuàng)建一個(gè)對(duì)象 Class.forName(xxx.xx.xx);的作用是要求JVM查找并加載指定的類(lèi),也就是說(shuō)JVM會(huì)執(zhí)行該類(lèi)的靜態(tài)代碼段
Class aClass = Class.forName(xxx.xx.xx); Object anInstance = aClass.newInstance(); Class.forName("").newInstance()返回的是object but there is some limit for this method to create instance that is your class constructor should no contain parameters, and you should cast the instance manually. Class Driver{ protected static Driver current; public static Driver getDriver(){ return current; } } Class MyDriver extends Driver{ static{ Driver.current=new MyDriver(); } MyDriver(){} } 用時(shí): Class.forName("MyDriver"); Driver d=Driver.getDriver(); 有的jdbc連接數(shù)據(jù)庫(kù)的寫(xiě)法里是Class.forName(xxx.xx.xx);而有一些:Class.forName(xxx.xx.xx).newInstance(),為什么會(huì)有這兩種寫(xiě)法呢? Class.forName(xxx.xx.xx) 返回的是一個(gè)類(lèi), .newInstance() 后才創(chuàng)建一個(gè)對(duì)象 Class.forName(xxx.xx.xx);的作用是要求JVM查找并加載指定的類(lèi),也就是說(shuō)JVM會(huì)執(zhí)行該類(lèi)的靜態(tài)代碼段 在JDBC規(guī)范中明確要求這個(gè)Driver類(lèi)必須向DriverManager注冊(cè)自己,即任何一個(gè)JDBC Driver的Driver類(lèi)的代碼都必須類(lèi)似如下: public class MyJDBCDriver implements Driver { static { DriverManager.registerDriver(new MyJDBCDriver()); } } 所以我們?cè)谑褂肑DBC時(shí)只需要Class.forName(XXX.XXX);就可以了