Java基礎(chǔ)學(xué)習(xí):java反射視頻

Java基礎(chǔ)學(xué)習(xí):java反射視頻

長(zhǎng)沙牛耳教育      2022-04-18 23:14:01     9

Java基礎(chǔ)學(xué)習(xí):java反射視頻,首先我們先聲明一個(gè)class,內(nèi)部包含了另一個(gè)對(duì)象,并且寫(xiě)了一些私有/公有/靜態(tài)的變量及方法,一會(huì)將針對(duì)這個(gè)class進(jìn)行反射的操作

課程價(jià)格 請(qǐng)咨詢(xún)

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹


    首先我們先聲明一個(gè)class,內(nèi)部包含了另一個(gè)對(duì)象,并且寫(xiě)了一些私有/公有/靜態(tài)的變量及方法,一會(huì)將針對(duì)這個(gè)class進(jìn)行反射的操作:


    這里的日志使用了Log是Android里的打印輸出,而非Java中的System.out.print。


   


    內(nèi)部的ReflectBean類(lèi)


   


    獲取擁有真正對(duì)象代碼結(jié)構(gòu)的Class:


    不知道各位小伙伴們有沒(méi)有思考過(guò),為什么我們new一個(gè)類(lèi)的時(shí)候這么方便,反而到了反射的時(shí)候會(huì)如此的麻煩?


   


    將Class實(shí)例化


 


    反射調(diào)用方法


   


    反射調(diào)用變量/static


   


    繼續(xù)理解


    我們知道JVM在使用一個(gè)類(lèi)的時(shí)候,會(huì)先去加載這個(gè)類(lèi)。也就是生成唯一的Class對(duì)象。這個(gè)Class對(duì)象擁有我們的java代碼的變量,方法結(jié)構(gòu)。但是它并不是一個(gè)實(shí)例。因此我們?cè)诜瓷涞臅r(shí)候,要先獲取構(gòu)造方法對(duì)象,也就是Class返回給我們的Constructor。此時(shí)我們運(yùn)行這個(gè)對(duì)象的newInstance,我們就初始化了這個(gè)Class,獲取了這個(gè)Class的實(shí)例。(這也就是為什么我們反射操作會(huì)如此的麻煩)


    實(shí)例化了這個(gè)對(duì)象之后,雖然只是一個(gè)Object對(duì)象,但是它和我們真正new的對(duì)象沒(méi)有任何區(qū)別,那么此時(shí)我們就可以正常的調(diào)用方法了。


    我們知道,static是屬于類(lèi),在類(lèi)被加載的時(shí)候就已經(jīng)出現(xiàn)了。那么此時(shí),反射也側(cè)面證實(shí)了這個(gè)問(wèn)題:


    在我們反射調(diào)用static的變量和方法時(shí),set或者invoke的參數(shù)傳的是null,也就是說(shuō)我們沒(méi)有傳遞任何對(duì)象實(shí)例,所以此時(shí)我們使用的是這個(gè)在類(lèi)被加載時(shí)就被創(chuàng)建的Class對(duì)象中的變量和方法,而非操作的實(shí)例對(duì)象。因此,對(duì)static是不是有了一個(gè)更為深刻的理解呢?


 以上就是長(zhǎng)沙牛耳教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):java反射視頻”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。


Java基礎(chǔ)學(xué)習(xí)

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過(guò)大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。