国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java“ Class.forName()”和“ Class.forName()newInstance()”之間有什么區(qū)別?

瀏覽:92日期:2024-05-07 17:28:03
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解決Java“ Class.forName()”和“ Class.forName()newInstance()”之間有什么區(qū)別??

也許一個(gè)示例演示如何使用兩種方法將有助于你更好地理解事物。因此,請(qǐng)考慮以下類:

package test;public class Demo { public Demo() {System.out.println('Hi!'); } public static void main(String[] args) throws Exception {Class clazz = Class.forName('test.Demo');Demo demo = (Demo) clazz.newInstance(); }}

如其javadoc中所述,調(diào)用將返回與具有給定字符串名稱的類或接口關(guān)聯(lián)的對(duì)象,即它返回受type變量影響的對(duì)象。Class.forName(String) Classtest.Demo.classclazzClass

然后,調(diào)用創(chuàng)建該 對(duì)象表示的類的新實(shí)例。就像通過(guò)帶有空參數(shù)列表的表達(dá)式實(shí)例化該類。換句話說(shuō),這實(shí)際上等于a 并返回的新實(shí)例。clazz.newInstance() Classnewnew Demo()Demo

Demo因此,運(yùn)行此類將輸出以下輸出:

Hi!

與傳統(tǒng)的最大區(qū)別new在于,它newInstance可以實(shí)例化一個(gè)直到運(yùn)行時(shí)才知道的類,從而使代碼更具動(dòng)態(tài)性。

一個(gè)典型的示例是JDBC API,它在運(yùn)行時(shí)加載執(zhí)行工作所需的確切驅(qū)動(dòng)程序。EJB容器,Servlet容器是另一個(gè)很好的例子:它們使用動(dòng)態(tài)運(yùn)行時(shí)加載來(lái)加載和創(chuàng)建在運(yùn)行時(shí)之前一無(wú)所知的組件。

實(shí)際上,如果你想走得更遠(yuǎn),請(qǐng)看一下Ted Neward的論文《理解Class.forName()》,我在上一段中對(duì)此進(jìn)行了解釋。

編輯(從發(fā)表為評(píng)論的OP中回答問(wèn)題):JDBC驅(qū)動(dòng)程序的情況有點(diǎn)特殊。如《 JDBC API入門》中DriverManager章節(jié)所述:

(…)Driver加載了一個(gè)類,因此通過(guò)以下DriverManager兩種方式之一自動(dòng)向進(jìn)行注冊(cè):

通過(guò)調(diào)用方法Class.forName。這將顯式加載驅(qū)動(dòng)程序類。由于它不依賴任何外部設(shè)置,因此推薦使用這種加載驅(qū)動(dòng)程序的方式來(lái)使用該DriverManager 框架。以下代碼加載該類acme.db.Driver:

Class.forName('acme.db.Driver');

如果acme.db.Driver編寫了這樣的代碼以便加載它會(huì)導(dǎo)致創(chuàng)建一個(gè)實(shí)例,并且還 DriverManager.registerDriver以該實(shí)例作為參數(shù)進(jìn)行調(diào)用(應(yīng)該這樣做),則它在 DriverManager驅(qū)動(dòng)程序列表中,可用于創(chuàng)建連接。

(...)

在這兩種情況下,新加載的Driver類都有責(zé)任通過(guò)調(diào)用進(jìn)行注冊(cè)DriverManager.registerDriver。如前所述,這應(yīng)該在加載類時(shí)自動(dòng)完成。

為了在初始化期間注冊(cè)自己,JDBC驅(qū)動(dòng)程序通常使用一個(gè)靜態(tài)初始化塊,如下所示:

package acme.db;public class Driver { static {java.sql.DriverManager.registerDriver(new Driver()); } ...}

調(diào)用Class.forName(“acme.db.Driver”)會(huì)導(dǎo)致acme.db.Driver類的初始化,并因此導(dǎo)致靜態(tài)初始化塊的執(zhí)行。并且 Class.forName(“acme.db.Driver”)確實(shí)會(huì)“創(chuàng)建”一個(gè)實(shí)例,但這只是實(shí)現(xiàn)(良好)JDBC驅(qū)動(dòng)程序的結(jié)果。

解決方法

Class.forName()和之間有什么區(qū)別Class.forName().newInstance()?

我不了解其中的重大區(qū)別(我已經(jīng)閱讀了一些有關(guān)它們的信息!)。請(qǐng)你幫助我好嗎?

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 欧美在线成人免费国产 | 一本色道久久88加勒比—综合 | 亚洲日韩视频免费观看 | 亚洲欧美日韩国产精品一区 | 欧美一级日韩在线观看 | 黄网在线 | 久草网站在线观看 | 99久久免费国产精品 | 在线视频亚洲一区 | 欧美不卡一区二区三区 | 怡红院免费全部视频在线视频 | 国产乱淫a∨片免费视频 | 色婷婷91 | 国产精品欧美亚洲日本综合 | 18年大片免费在线观看 | 怡红院免费在线视频 | 怡红院视频在线 | 丁香伊人五月综合激激激 | 免费播放国产性色生活片 | 久久国产免费观看 | 日韩一级影片 | 久久精品亚瑟全部免费观看 | 欧美一级免费在线观看 | 亚洲欧美另类专区 | 免费高清毛片在线播放视频 | 亚州综合 | 亚洲国产综合人成综合网站00 | 日韩美女一区二区三区 | 日韩久久一级毛片 | 日韩成人在线播放 | 欧美亚洲视频 | 亚洲精品一区二区三区四区 | 国产一区二区三区欧美 | 欧美jizz18性欧美 | 悟空影视大全免费高清 | 国产成人咱精品视频免费网站 | 欧美日中文字幕 | 久草青青 | 国产女王丨vk| 国产精品久久久久激情影院 | 末满18以下勿进色禁网站 |