Java反射機(jī)制的講解
Java中的反射提供了一種運(yùn)行期獲取對(duì)象元信息的手段。即正常方法是通過(guò)一個(gè)類創(chuàng)建對(duì)象,反射方法就是通過(guò)一個(gè)對(duì)象找到一個(gè)類的信息。
Java的反射機(jī)制的實(shí)現(xiàn)要借助于4個(gè)類:class,Constructor,F(xiàn)ield,Method;
其中class代表的時(shí)類對(duì) 象,Constructor-類的構(gòu)造器對(duì)象,F(xiàn)ield-類的屬性對(duì)象,Method-類的方法對(duì)象。通過(guò)這四個(gè)對(duì)象我們可以粗略的看到一個(gè)類的各個(gè)組成部分。
Java反射的作用:
在Java運(yùn)行時(shí)環(huán)境中,對(duì)于任意一個(gè)類,可以知道這個(gè)類有哪些屬性和方法。對(duì)于任意一個(gè)對(duì)象,可以調(diào)用它的任意一個(gè)方法。這種動(dòng)態(tài)獲取類的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能來(lái)自于Java 語(yǔ)言的反射(Reflection)機(jī)制。
Java 反射機(jī)制主要提供了以下功能
- 在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類。
- 在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象。
- 在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法。
- 在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法。
反射的常用類和函數(shù):Java反射機(jī)制的實(shí)現(xiàn)要借助于4個(gè)類:Class,Constructor,F(xiàn)ield,Method;
其中class代表的是類對(duì)象,Constructor-類的構(gòu)造器對(duì)象,F(xiàn)ield-類的屬性對(duì)象,Method-類的方法對(duì)象,通過(guò)這四個(gè)對(duì)象我們可以粗略的看到一個(gè)類的各個(gè)組成部分。其中最核心的就是Class類,它是實(shí)現(xiàn)反射的基礎(chǔ),它包含的方法我們?cè)诘谝徊糠忠呀?jīng)進(jìn)行了基本的闡述。應(yīng)用反射時(shí)我們最關(guān)心的一般是一個(gè)類的構(gòu)造器、屬性和方法,下面我們主要介紹Class類中針對(duì)這三個(gè)元素的方法:
1、得到構(gòu)造器的方法
- Constructor getConstructor(Class[] params) -- 獲得使用特殊的參數(shù)類型的公共構(gòu)造函數(shù),
- Constructor[] getConstructors() -- 獲得類的所有公共構(gòu)造函數(shù)
- Constructor getDeclaredConstructor(Class[] params) -- 獲得使用特定參數(shù)類型的構(gòu)造函數(shù)(與接入級(jí)別無(wú)關(guān))
- Constructor[] getDeclaredConstructors() -- 獲得類的所有構(gòu)造函數(shù)(與接入級(jí)別無(wú)關(guān))
2、獲得字段信息的方法
- Field getField(String name) -- 獲得命名的公共字段
- Field[] getFields() -- 獲得類的所有公共字段
- Field getDeclaredField(String name) -- 獲得類聲明的命名的字段
- Field[] getDeclaredFields() -- 獲得類聲明的所有字段
3、獲得方法信息的方法
- Method getMethod(String name, Class[] params) -- 使用特定的參數(shù)類型,獲得命名的公共方法
- Method[] getMethods() -- 獲得類的所有公共方法
- Method getDeclaredMethod(String name, Class[] params) -- 使用特寫(xiě)的參數(shù)類型,獲得類聲明的命名的方法
- Method[] getDeclaredMethods() -- 獲得類聲明的所有方法
在程序開(kāi)發(fā)中使用反射并結(jié)合屬性文件,可以達(dá)到程序代碼與配置文件相分離的目的。如果我們想要得到對(duì)象的信息,一般需要“引入需要的‘包.類'的名稱——通過(guò)new實(shí)例化——取得實(shí)例化對(duì)象”這樣的過(guò)程。使用反射就可以變成“實(shí)例化對(duì)象——getClass()方法——得到完整的‘包.類'名稱”這樣的過(guò)程。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Mybatis-Plus Wrapper條件構(gòu)造器超詳細(xì)使用教程
接口方法的參數(shù)中,會(huì)出現(xiàn)各種 Wrapper,比如 queryWrapper、updateWrapper 等。Wrapper 的作用就是用于定義各種各樣的條件(where)。所以不管是查詢、更新、刪除都會(huì)用到Wrapper2022-03-03Java中十六進(jìn)制和十進(jìn)制之間互相轉(zhuǎn)換代碼示例
這篇文章主要給大家介紹了關(guān)于Java中十六進(jìn)制和十進(jìn)制之間互相轉(zhuǎn)換的相關(guān)資料,我們項(xiàng)目過(guò)程中總是要用到十進(jìn)制與十六進(jìn)制相互轉(zhuǎn)換的方法,需要的朋友可以參考下2023-07-07Java redisTemplate阻塞式處理消息隊(duì)列
用redis中的List可以實(shí)現(xiàn)隊(duì)列,這樣可以用來(lái)做消息處理和任務(wù)調(diào)度的隊(duì)列。因此,本文將主要為大家介紹如何利用redisTemplate處理消息隊(duì)列,感興趣的小伙伴可以了解一下2021-12-12SpringBoot中實(shí)現(xiàn)加載遠(yuǎn)程配置的代碼示例
本文章將通過(guò)結(jié)合consul config來(lái)講解在springboot中如何加載遠(yuǎn)程配置:通過(guò)consul config加載consul server中存儲(chǔ)的配置,需要的朋友可以參考下2023-06-06java中for和forEach的速度比較實(shí)例Demo
for循環(huán)中的循環(huán)條件中的變量只求一次值,而foreach語(yǔ)句是java5新增,在遍歷數(shù)組、集合的時(shí)候,foreach擁有不錯(cuò)的性能,這篇文章主要給大家介紹了關(guān)于java中for和forEach速度比較的相關(guān)資料,需要的朋友可以參考下2021-08-08Jenkins 關(guān)閉和重啟詳細(xì)介紹及實(shí)現(xiàn)
這篇文章主要介紹了Jenkins的關(guān)閉、重啟的相關(guān)資料,用jar -jar jenkins.war來(lái)啟動(dòng)jenkins服務(wù)器,那么我們?nèi)绾侮P(guān)閉或者重啟jenkins服務(wù)器呢,這里就給出實(shí)現(xiàn)的方法,需要的朋友可以參考下2016-11-11Java嵌套for循環(huán)的幾種常見(jiàn)優(yōu)化方案
這篇文章主要給大家介紹了關(guān)于Java嵌套for循環(huán)的幾種常見(jiàn)優(yōu)化,在Java中優(yōu)化嵌套for循環(huán)可以通過(guò)以下幾種方式來(lái)提高性能和效率,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07Java 線程的優(yōu)先級(jí)(setPriority)案例詳解
這篇文章主要介紹了Java 線程的優(yōu)先級(jí)(setPriority)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Springboot使用put、delete請(qǐng)求報(bào)錯(cuò)405的處理
這篇文章主要介紹了Springboot使用put、delete請(qǐng)求報(bào)錯(cuò)405的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07