免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Java為什么支持反射機(jī)制?
學(xué)習(xí)心得:Java為什么支持反射機(jī)制?

Baidu(百度)搜索Yisou(一搜)搜索┊去Google搜索

        Java為什么能夠支持Reflection?答案是Java運(yùn)行時(shí)仍然擁有類(lèi)型信息,它包含了這個(gè)類(lèi)一切:它有哪些字段、哪些方法,各是何種保護(hù)級(jí)別等等,還有這個(gè)類(lèi)依賴(lài)于哪些類(lèi)。在Java中,類(lèi)信息以對(duì)象的形式存放,這些對(duì)象是一種元對(duì)象,它們的類(lèi)型就是Class。擁有了這些信息,無(wú)論是動(dòng)態(tài)創(chuàng)建對(duì)象還是調(diào)用某些方法都是輕而易舉的。在C++中,通過(guò)RTTI(運(yùn)行時(shí)類(lèi)型識(shí)別),我們也可以知道類(lèi)的一些信息,但為什么C++中卻沒(méi)有Reflection,原因是類(lèi)型信息不完整。RTTI這個(gè)名字本身就告訴我們,C++的類(lèi)型信息是用來(lái)進(jìn)行類(lèi)型識(shí)別的,因此,它也不需要其它額外的信息。并不是C++無(wú)法做到這一點(diǎn),而是C++不希望給用戶(hù)增加額外的負(fù)擔(dān)。有所得,必然有所失,因此,C++放棄了元對(duì)象。關(guān)于這一點(diǎn),C++之父Bjarne Stroustrup在他的《C++語(yǔ)言的設(shè)計(jì)與演化》的14.2.8節(jié)中進(jìn)行了深入的討論。

        元對(duì)象是Java Reflection的物質(zhì)基礎(chǔ),那它的精神基礎(chǔ)又是什么呢?Java為什么要支持Reflection?經(jīng)過(guò)上面的討論,我們把這個(gè)問(wèn)題再進(jìn)一步,為什么Java要提供元對(duì)象?

        討論這個(gè)問(wèn)題,我們還要拉回到十年前,那時(shí)Java剛剛來(lái)到正式登上歷史的舞臺(tái)。Java實(shí)際上誕生在這之前的數(shù)年,那時(shí)候還叫Oak,環(huán)境所限使得這一劃時(shí)代的杰作甫一出爐便被束之高閣。當(dāng)Netscape掀起了為網(wǎng)絡(luò)大戲的序幕,Java得以鳳凰涅槃,這其中很重要的一個(gè)原因就是Java是以網(wǎng)絡(luò)為中心的。

        仔細(xì)觀察,我們會(huì)發(fā)現(xiàn),Java的整個(gè)基礎(chǔ)架構(gòu)的設(shè)計(jì)都是為網(wǎng)絡(luò)服務(wù)。首當(dāng)其沖的便是Java中最著名的跨平臺(tái)。其實(shí),在Java之前的年代,人們也需要考慮平臺(tái)之間的可移植性,但這種移植大多數(shù)集中在源碼一級(jí),這也就是C語(yǔ)言可以流行的原因之一,在單機(jī)環(huán)境下,平臺(tái)的差異并不那么明顯。網(wǎng)絡(luò)的出現(xiàn)使平臺(tái)之間差異凸現(xiàn)出來(lái),因?yàn)榫W(wǎng)絡(luò)可能會(huì)連接各種各樣的計(jì)算機(jī)和設(shè)備。沒(méi)錯(cuò),還有設(shè)備,你也許知道Java最初的開(kāi)發(fā)是和嵌入式設(shè)備相關(guān)的。一旦應(yīng)用可以跨平臺(tái),程序開(kāi)發(fā)和后期管理維護(hù)工作將得到極大的簡(jiǎn)化,可移植性也從源碼級(jí)晉升到二進(jìn)制級(jí)(Java字節(jié)碼)。所以,跨平臺(tái)實(shí)際上也是為了網(wǎng)絡(luò)打基礎(chǔ)。Java中另一個(gè)重要的買(mǎi)點(diǎn)——安全性與網(wǎng)絡(luò)之間的關(guān)系更為密切,誰(shuí)都可以想出幾條理由,把二者關(guān)聯(lián)起來(lái)。
再來(lái)具體看看Java的基礎(chǔ)架構(gòu)如何對(duì)網(wǎng)絡(luò)進(jìn)行支持的。還記得Java最初是怎么吸引人的嗎?沒(méi)錯(cuò),Applet。熟悉原理的朋友都知道,Applet的運(yùn)行是把遠(yuǎn)程的類(lèi)文件下載到本地來(lái)執(zhí)行的。相對(duì)于本地硬盤(pán),網(wǎng)絡(luò)給我們的感覺(jué)就是一個(gè)字————慢。如果Java采用傳統(tǒng)可執(zhí)行文件組織方式,即一個(gè)完整的可執(zhí)行文件,把整個(gè)Applet下載下來(lái)的運(yùn)行,只怕等到花兒也謝了。Java采用的手法是把文件拆開(kāi),以類(lèi)為單位進(jìn)行組織,這就是我們今天見(jiàn)到的class文件。這樣,執(zhí)行的過(guò)程就變成第一個(gè)類(lèi)下載之后就可以運(yùn)行,大大節(jié)省了最初的等待時(shí)間。好的設(shè)計(jì)會(huì)把程序分成若干的模塊,所以,絕大多數(shù)程序不可能寫(xiě)在一個(gè)類(lèi)中。因此,類(lèi)文件中必須包含它所用到類(lèi)。對(duì)于引導(dǎo)部分,我們可以讓它以特定的方式開(kāi)始執(zhí)行,比如把我們耳熟能詳?shù)膍ain方法放在特定的字節(jié),但對(duì)于沒(méi)有定法的任意方法,是沒(méi)有辦法規(guī)定的,而一個(gè)類(lèi)調(diào)用另一個(gè)類(lèi)的方法就是這樣隨意,因此類(lèi)文件中必須包含這個(gè)類(lèi)方法的信息,進(jìn)一步字段信息也會(huì)加進(jìn)來(lái),這樣幾乎一個(gè)完整類(lèi)的信息就出來(lái)了,而這些信息對(duì)應(yīng)的恰好是元對(duì)象。所以,元對(duì)象出現(xiàn)在Java基礎(chǔ)架構(gòu)中。

        有了元對(duì)象,Reflection也成了一件順其自然的事情。有了Reflection,Java也就擁有了動(dòng)態(tài)擴(kuò)展的能力,這樣就可以極大的提高程序的靈活性。

        關(guān)于Java基礎(chǔ)結(jié)構(gòu)對(duì)網(wǎng)絡(luò)的支持還可以再說(shuō)幾句。class文件經(jīng)過(guò)了精心的設(shè)計(jì),本身相當(dāng)緊湊,其目的就是為了方便在網(wǎng)絡(luò)上傳輸,而JAR文件的出現(xiàn),其目的也是為了方便網(wǎng)絡(luò)傳輸,因?yàn)槿绻看沃粋鬏斠粋€(gè)類(lèi),大量的時(shí)間都被浪費(fèi)在建立網(wǎng)絡(luò)連接的過(guò)程中,JAR文件使得一次傳輸多個(gè)類(lèi)成為可能,而且我們還知道JAR文件中的數(shù)據(jù)是經(jīng)過(guò)壓縮的,這樣可以進(jìn)一步減少下載時(shí)間。Java基礎(chǔ)架構(gòu)對(duì)網(wǎng)絡(luò)的支持,《深入Java虛擬機(jī)》(第二版)的4.3節(jié)進(jìn)行了很好闡述,有興趣不妨看一下。

        對(duì)Reflection思考讓我有機(jī)會(huì)對(duì)Java本身的設(shè)計(jì)進(jìn)行深入的思考。一個(gè)好的軟件設(shè)計(jì)需要一個(gè)核心理念作為支撐,所有的一切都是圍繞核心進(jìn)行的,而對(duì)于Java,這個(gè)核心就是網(wǎng)絡(luò)。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
PHP reflection反射機(jī)制測(cè)試實(shí)例
java反射機(jī)制
JAVA反射原理解讀
談?wù)凧ava反射:從入門(mén)到實(shí)踐,再到原理
《Java編程思想》(第二版)第12章:執(zhí)行期型別辨識(shí)(下)
Java反射與代理
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服