Java反射機制的講解
Java中的反射提供了一種運行期獲取對象元信息的手段。即正常方法是通過一個類創(chuàng)建對象,反射方法就是通過一個對象找到一個類的信息。
Java的反射機制的實現(xiàn)要借助于4個類:class,Constructor,F(xiàn)ield,Method;
其中class代表的時類對 象,Constructor-類的構(gòu)造器對象,F(xiàn)ield-類的屬性對象,Method-類的方法對象。通過這四個對象我們可以粗略的看到一個類的各個組成部分。
Java反射的作用:
在Java運行時環(huán)境中,對于任意一個類,可以知道這個類有哪些屬性和方法。對于任意一個對象,可以調(diào)用它的任意一個方法。這種動態(tài)獲取類的信息以及動態(tài)調(diào)用對象的方法的功能來自于Java 語言的反射(Reflection)機制。
Java 反射機制主要提供了以下功能
- 在運行時判斷任意一個對象所屬的類。
- 在運行時構(gòu)造任意一個類的對象。
- 在運行時判斷任意一個類所具有的成員變量和方法。
- 在運行時調(diào)用任意一個對象的方法。
反射的常用類和函數(shù):Java反射機制的實現(xiàn)要借助于4個類:Class,Constructor,F(xiàn)ield,Method;
其中class代表的是類對象,Constructor-類的構(gòu)造器對象,F(xiàn)ield-類的屬性對象,Method-類的方法對象,通過這四個對象我們可以粗略的看到一個類的各個組成部分。其中最核心的就是Class類,它是實現(xiàn)反射的基礎,它包含的方法我們在第一部分已經(jīng)進行了基本的闡述。應用反射時我們最關心的一般是一個類的構(gòu)造器、屬性和方法,下面我們主要介紹Class類中針對這三個元素的方法:
1、得到構(gòu)造器的方法
- Constructor getConstructor(Class[] params) -- 獲得使用特殊的參數(shù)類型的公共構(gòu)造函數(shù),
- Constructor[] getConstructors() -- 獲得類的所有公共構(gòu)造函數(shù)
- Constructor getDeclaredConstructor(Class[] params) -- 獲得使用特定參數(shù)類型的構(gòu)造函數(shù)(與接入級別無關)
- Constructor[] getDeclaredConstructors() -- 獲得類的所有構(gòu)造函數(shù)(與接入級別無關)
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) -- 使用特寫的參數(shù)類型,獲得類聲明的命名的方法
- Method[] getDeclaredMethods() -- 獲得類聲明的所有方法
在程序開發(fā)中使用反射并結(jié)合屬性文件,可以達到程序代碼與配置文件相分離的目的。如果我們想要得到對象的信息,一般需要“引入需要的‘包.類'的名稱——通過new實例化——取得實例化對象”這樣的過程。使用反射就可以變成“實例化對象——getClass()方法——得到完整的‘包.類'名稱”這樣的過程。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接
相關文章
Mybatis-Plus Wrapper條件構(gòu)造器超詳細使用教程
接口方法的參數(shù)中,會出現(xiàn)各種 Wrapper,比如 queryWrapper、updateWrapper 等。Wrapper 的作用就是用于定義各種各樣的條件(where)。所以不管是查詢、更新、刪除都會用到Wrapper2022-03-03Java中十六進制和十進制之間互相轉(zhuǎn)換代碼示例
這篇文章主要給大家介紹了關于Java中十六進制和十進制之間互相轉(zhuǎn)換的相關資料,我們項目過程中總是要用到十進制與十六進制相互轉(zhuǎn)換的方法,需要的朋友可以參考下2023-07-07SpringBoot中實現(xiàn)加載遠程配置的代碼示例
本文章將通過結(jié)合consul config來講解在springboot中如何加載遠程配置:通過consul config加載consul server中存儲的配置,需要的朋友可以參考下2023-06-06Java嵌套for循環(huán)的幾種常見優(yōu)化方案
這篇文章主要給大家介紹了關于Java嵌套for循環(huán)的幾種常見優(yōu)化,在Java中優(yōu)化嵌套for循環(huán)可以通過以下幾種方式來提高性能和效率,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-07-07Java 線程的優(yōu)先級(setPriority)案例詳解
這篇文章主要介紹了Java 線程的優(yōu)先級(setPriority)案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08Springboot使用put、delete請求報錯405的處理
這篇文章主要介紹了Springboot使用put、delete請求報錯405的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07