?? 這里有必要提一下就是Class下的newInstance()和new有什么區(qū)別?,首先,newInstance( )是一個(gè)方法,而new是一個(gè)關(guān)鍵字,其次,Class下的newInstance()的使用有局限,因?yàn)樗蓪?duì)象只能調(diào)用無(wú)參的構(gòu)造函數(shù),而使用 new關(guān)鍵字生成對(duì)象沒(méi)有這個(gè)限制。 ?
?? 好,到此為止,我們總結(jié)如下: ?
?? Class.forName("")返回的是類(lèi) ?
?? Class.forName("").newInstance()返回的是object ?
?? 有數(shù)據(jù)庫(kù)開(kāi)發(fā)經(jīng)驗(yàn)朋友會(huì)發(fā)現(xiàn),為什么在我們加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)包的時(shí)候有的卻沒(méi)有調(diào)用newInstance( )方法呢?即有的jdbc連接數(shù)據(jù)庫(kù)的寫(xiě)法里是Class.forName(xxx.xx.xx);而有一 些:Class.forName(xxx.xx.xx).newInstance(),為什么會(huì)有這兩種寫(xiě)法呢?
?? 剛才提到,Class.forName("");的作用是要求JVM查找并加載指定的類(lèi),如果在類(lèi)中有靜態(tài)初始化器的話,JVM必然會(huì)執(zhí)行該類(lèi)的靜態(tài)代碼 段。而在JDBC規(guī)范中明確要求這個(gè)Driver類(lèi)必須向DriverManager注冊(cè)自己,即任何一個(gè)JDBC?Driver的 Driver類(lèi)的代碼都必須類(lèi)似如下:
??
1
public
class
MyJDBCDriver
implements
Driver {
2
static
{
3
DriverManager.registerDriver(
new
MyJDBCDriver());
4
}
5
}
?
既然在靜態(tài)初始化器的中已經(jīng)進(jìn)行了注冊(cè),所以我們?cè)谑褂肑DBC時(shí)只需要Class.forName(XXX.XXX);就可以了。?
1: Class cl=A.class; ?
? ? ? ? ? ? ? ? ? JVM將使用類(lèi)A的類(lèi)裝載器, 將類(lèi)A裝入內(nèi)存(前提是:類(lèi)A還沒(méi)有裝入內(nèi)存),不對(duì)類(lèi)A做類(lèi)的初始化工作.返回類(lèi)A的Class的對(duì)象。
2:Class cl=對(duì)象引用o.getClass();
? ? ? ? ? ? ? ? ? 返回引用o運(yùn)行時(shí)真正所指的對(duì)象(因?yàn)?子對(duì)象的引用可能會(huì)賦給父對(duì)象的引用變量中)所屬的類(lèi)的Class的對(duì)象 。
3:Class.forName("類(lèi)名");
? ? ? ? ? ? ? ? ? .裝入類(lèi)A,并做類(lèi)的初始化
.getClass()是動(dòng)態(tài)的,其余是靜態(tài)的。
.class和class.forName()只能返回類(lèi)內(nèi)field的默認(rèn)值,getClass可以返回當(dāng)前對(duì)象中field的最新值
Class.forName() 返回的是一個(gè)類(lèi), .newInstance() 后才創(chuàng)建一個(gè)對(duì)象, Class.forName()的作用是要求JVM查找并加載指定的類(lèi),也就是說(shuō)JVM會(huì)執(zhí)行該類(lèi)的
Class.forName(),Class.forName().newInstance() ,New ,類(lèi)名.class,,class.forName(),,g
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

