更新時(shí)間:2020-10-21 17:18:29 來源:動力節(jié)點(diǎn) 瀏覽1957次
也許程序員們聽過這么一句話,就是沒有反射也就沒有框架,現(xiàn)有的框架都是以反射為基礎(chǔ),在實(shí)際項(xiàng)目的開發(fā)中,框架和類都是不可缺少的,反射是將框架和類結(jié)合在一起的粘合劑,所以想學(xué)好編程,學(xué)好反射機(jī)制是十分重要的。這篇文章來介紹java反射機(jī)制的相關(guān)基礎(chǔ)知識,java零基礎(chǔ)的新手朋友們可以來來學(xué)習(xí)下面的內(nèi)容。

什么是java反射機(jī)制?我們又為什么要學(xué)它?當(dāng)程序運(yùn)行時(shí),允許改變程序結(jié)構(gòu)或變量類型,這種語言稱為動態(tài)語言。我們認(rèn)為java并不是動態(tài)語言,但是它卻有一個(gè)非常突出的動態(tài)相關(guān)機(jī)制,就是反射機(jī)制。
想要理解java反射機(jī)制的含義,應(yīng)該再了解兩個(gè)概念,編譯期和運(yùn)行期,編譯期就是編譯器幫你把源代碼翻譯成機(jī)器能識別的代碼,比如編譯器把java代碼編譯成jvm識別的字節(jié)碼文件,而運(yùn)行期指的是將可執(zhí)行文件交給操作系統(tǒng)去執(zhí)行,java反射機(jī)制是在運(yùn)行狀態(tài)中,對于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對于任意一個(gè)對象,都能夠調(diào)用它的任意方法和屬性;這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能稱為java語言的反射機(jī)制。簡單說,反射機(jī)制值得是程序在運(yùn)行時(shí)能夠獲取自身的信息。在java中,只要給定類的名字,那么就可以通過反射機(jī)制來獲得類的所有信息。
java反射機(jī)制提供了如下的功能:在運(yùn)行時(shí)能夠判斷任意一個(gè)對象所屬的類;在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對象;在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法;在運(yùn)行時(shí)調(diào)用任一對象的方法;在運(yùn)行時(shí)創(chuàng)建新類對象。
需要知道的是,反射也有缺點(diǎn)。反射機(jī)制的功能非常強(qiáng)大,但不能濫用。一是因?yàn)樾阅軉栴},Java反射機(jī)制中包含了一些動態(tài)類型,所以Java虛擬機(jī)不能夠?qū)@些動態(tài)代碼進(jìn)行優(yōu)化。因此,反射操作的效率要比正常操作效率低很多。我們應(yīng)該避免在對性能要求很高的程序或經(jīng)常被執(zhí)行的代碼中使用反射。二是安全限制,使用反射通常需要程序的運(yùn)行沒有安全方面的限制,如果一個(gè)程序?qū)Π踩蕴岢鲆?,則最好不要使用反射。
Java反射機(jī)制為程序很大程度上的提高了靈活性和擴(kuò)展性,可以節(jié)省很多資源,反射機(jī)制是java這種動態(tài)語言一個(gè)關(guān)鍵,所以零基礎(chǔ)的朋友們在初始學(xué)習(xí)的時(shí)候,對java反射機(jī)制有通透的理解的話,在java視頻教程中學(xué)習(xí)關(guān)于反射的內(nèi)容,肯定是會有所幫助的。

初級 202925

初級 203221

初級 202629

初級 203743