欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

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

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

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

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

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

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

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

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

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

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

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

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

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久