最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java反射機制,反射相關(guān)API,反射API使用方式(反射獲取實體類字段名和注解值)

 更新時間:2024年07月09日 15:13:35   作者:xingze_W  
這篇文章主要介紹了Java反射機制,反射相關(guān)API,反射API使用方式(反射獲取實體類字段名和注解值),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1. 認識反射

Java反射機制是指在運行狀態(tài)中,動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能

Java的反射機制是其一大特性,反射機制是構(gòu)建框架技術(shù)的基礎(chǔ)所在。

Java反射有三個動態(tài)性質(zhì):

  • 運行時生成對象實例
  • 運行期間調(diào)用方法
  • 運行時更改屬性

Java的反射機制在編譯時并不確定是哪個類被加載了,而是在程序運行時才加載、探知、使用,這樣的特點就是反射。

類似于光學(xué)中的反射概念,在計算機科學(xué)領(lǐng)域,反射是指一類應(yīng)用,它們能夠自描述和自控制。

Java反射可實現(xiàn)的功能:

  • 在運行時判斷任意一個對象所屬的類
  • 在運行時構(gòu)造任意一個類的對象
  • 在運行時判斷任意一個類所具有的方法和屬性
  • 在運行時調(diào)用任意一個對象的方法

使用反射的基本步驟

  • 獲得需要操作的類的Java.lang.Class對象
  • 調(diào)用Class的方法獲取Field、Method等對象
  • 使用反射API進行操作

2. 反射相關(guān)API

Java反射技術(shù)常用的類:

  • Class類:反射的核心類,反射所有的操作都是圍繞該類來生成的。通過Class類,可以獲取類的屬性、方法等內(nèi)容信息。
  • Field類:表示類的屬性,可以獲取和設(shè)置類中屬性的值。
  • Method類:表示類的方法,可以用來獲取類中方法的信息,或者執(zhí)行方法。
  • Constructor類: 表示類的構(gòu)造方法。

獲取Class對象

每個類被加載后,系統(tǒng)就會為該類生成一個對應(yīng)的Class對象,通過該Class對象就可以訪問JVM中的這個類。

Java程序獲得Class對象通常有以下三種方式:

  • 調(diào)用對象的getClass()方法:getClass()方法是java.lang.Object類中的一個方法,所有的Java對象都可以調(diào)用該方法,該方法會返回該對象所屬類的Class對象。

代碼如下:

 Student s = new Student();
 Class c = s.getClass();
  • 調(diào)用類的Class屬性:調(diào)用類的Class屬性可獲取該類對應(yīng)的Class對象,這種方式需要在編譯期間就知道類的名稱。

代碼如下:

Class  s = Student.class;
  • 使用Class類的forName()靜態(tài)方法:使用Class類的forName()靜態(tài)方法也可以獲取該類對應(yīng)的Class對象。此方法需要傳入字符串參數(shù),該字符串參數(shù)的值是某個類的全名(包名.類名)。

代碼如下:

Class s = Class.forName("com.xingze.pojo.Student");      //正確
Class s = Class.forName("Student");       //錯誤,會拋出ClassNotFoundException異常

從Class對象中獲取信息

在獲得了某個類所對應(yīng)的Class對象之后,程序就可以調(diào)用Class對象的方法來獲取該類的詳細信息。

Class類提供了大量實例方法來獲取對應(yīng)類的詳細信息,如構(gòu)造方法、普通方法、屬性、注解等其他信息。

具體如下:

  • 訪問Class對應(yīng)的類包含的構(gòu)造方法
方法說明
Constructor getConstructor(Class[] params)返回此Class對象所包含的指定的public構(gòu)造方法,params參數(shù)是按聲明順序指定該構(gòu)造方法參數(shù)類型的Class對象的一個數(shù)組。構(gòu)造方法的參數(shù)類型與params所指定的參數(shù)類型匹配。如:Constructor co = s.getConstructor(String.class,Integer.class); //s是某個Class對象
Constructor[] getConstructors(Class[] params)返回此Class對象所包含的所有public構(gòu)造方法
Constructor getDeclaredConstructor(Class[] params )返回此Class對象所包含的指定的構(gòu)造方法,與訪問級別無關(guān)(可訪問paivate構(gòu)造方法)
Constructor[] getDeclaredConstructors( )返回此Class對象所包含的所有構(gòu)造方法,與訪問級別無關(guān)(可訪問paivate構(gòu)造方法)
  • 訪問Class對應(yīng)的類包含的方法
方法說明
Method getMethod(String name, Class[] params)返回此Class對象所包含的指定的public方法,name參數(shù)用于指定方法名稱,params參數(shù)是按聲明順序指定該方法參數(shù)類型的Class對象的一個數(shù)組。構(gòu)造方法的參數(shù)類型與params所指定的參數(shù)類型匹配。如:Method m = s.getMethod(“info”,String.class,Integer.class); //s是某個Class對象
Method[] getMethods()返回此Class對象所包含的所有public方法
Method getDeclaredMethod(String name, Class[] params)返回此Class對象所包含的指定的方法,與訪問級別無關(guān)(可訪問paivate方法)
Method[] getDeclaredMethods( )返回此Class對象所包含的所有方法,與訪問級別無關(guān)(可訪問paivate方法)
  • 訪問Class對應(yīng)的類包含的屬性
方法說明
Field getField(String name)返回此Class對象所包含的指定的public屬性,name參數(shù)用于指定屬性名稱,如:Field age1 = s.getField(“age”); //s是某個Class對象,age為屬性名
Field[] getFields()返回此Class對象所包含的所有public屬性
Field getDeclaredField(String name)返回此Class對象所包含的指定的public屬性,與訪問級別無關(guān)(可訪問paivate屬性)
Field[] getDeclaredFields( )返回此Class對象所包含的所有屬性,與訪問級別無關(guān)(可訪問paivate屬性)
  • 訪問Class對應(yīng)的類包含的注解
方法說明
< A extends Annotation > A getAnnotation(Class annotationClass)試圖獲取該Class對象所表示類上的所有注解,如果該類型的注解不存在則返回null。annotationClass參數(shù)對應(yīng)于注解類型的Class對象
Annotation[] getAnnotations()返回此類上的所有注解
Annotation[] getDeclaredAnnotations()返回直接存在于此類上的所有注解
  • 訪問Class對應(yīng)的類包含的其他信息
方法說明
Class[] getDeclaredClasses()返回Class對應(yīng)的類所在的外部類
Class[] getDeclaringClasses()返回Class對應(yīng)的類所在的內(nèi)部類
Class[] getInterfaces()返回Class對應(yīng)的類所實現(xiàn)的全部接口
Class[] getPackage()返回Class對應(yīng)的類所在的包
Class[] getName()返回Class對應(yīng)的類的名稱
Class[] getSimpleName()返回Class對應(yīng)的類的簡稱

3. 反射API使用

反射獲取實體類字段名和注解值

/**
  * 獲取指定實體類字段名和title注解值
  *
  */
 public static Map<String, String> getFieldTitleMap(String className) {
     try {
         Map<String, String> map = new HashMap<>();
         Field[] fields = Class.forName(className).getDeclaredFields();
         for (Field field : fields) {
             if (field.isAnnotationPresent(Title.class)) {
                 map.put(field.getName(), field.getAnnotation(Title.class).value());
             }
         }
         return map;
     } catch (Exception e) {
         logger.error(e.getMessage());
     }
     return Collections.emptyMap();
 }

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 上傳自己的jar包到maven中央倉庫的快速操作方法

    上傳自己的jar包到maven中央倉庫的快速操作方法

    網(wǎng)絡(luò)上可以搜索到很多jar包到中央倉庫,但是都不是多適合自己的項目,于是自己動手寫個,本文檔通過sonatype上傳jar包至maven中央倉庫,Sonatype通過JIRA來管理OSSRH倉庫,具體實例代碼跟隨小編一起看看吧
    2021-08-08
  • maven打包失敗踩坑的解決方式詳解

    maven打包失敗踩坑的解決方式詳解

    最近因為新項目有很多自定義的jar包,而且占內(nèi)存很多,就直接拷貝過來,新開了一個maven倉庫,用的時候沒有問題,但是打包一直編譯不通過,下面這篇文章主要給大家介紹了關(guān)于maven打包失敗踩坑的解決方式,需要的朋友可以參考下
    2023-05-05
  • IDEA 2020.1 搜索不到Chinese ​(Simplified)​ Language Pack EAP,無法安裝的問題

    IDEA 2020.1 搜索不到Chinese ​(Simplified)​ Language

    小編在安裝中文插件時遇到IDEA 2020.1 搜索不到Chinese &#8203;(Simplified)&#8203; Language Pack EAP,無法安裝的問題,本文給大家分享我的解決方法,感興趣的朋友一起看看吧
    2020-04-04
  • 微信開發(fā)之使用java獲取簽名signature

    微信開發(fā)之使用java獲取簽名signature

    這篇文章主要為大家詳細介紹了微信開發(fā)之使用java獲取簽名signature,感興趣的小伙伴們可以參考一下
    2016-08-08
  • java實現(xiàn)簡單的webservice方式

    java實現(xiàn)簡單的webservice方式

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單的webservice方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • springboot集成mybatisplus實例詳解

    springboot集成mybatisplus實例詳解

    這篇文章主要介紹了springboot集成mybatisplus實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Spring的RestTemplata使用的具體方法

    Spring的RestTemplata使用的具體方法

    本篇文章主要介紹了Spring的RestTemplata使用的具體方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java高效地分割文本文件的方法技巧

    Java高效地分割文本文件的方法技巧

    這篇文章介紹了Java中零拷貝技術(shù)的原理和應(yīng)用,通過比較傳統(tǒng)方法和零拷貝方法的性能,展示了如何使用FileChannel的transferTo方法高效地分割大型文本文件,特別是在保持行完整性的同時,顯著提高了處理速度,需要的朋友可以參考下
    2025-05-05
  • Spring Boot2中如何優(yōu)雅地個性化定制Jackson實現(xiàn)示例

    Spring Boot2中如何優(yōu)雅地個性化定制Jackson實現(xiàn)示例

    這篇文章主要為大家介紹了Spring Boot2中如何優(yōu)雅地個性化定制Jackson實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Nacos客戶端本地緩存和故障轉(zhuǎn)移方式

    Nacos客戶端本地緩存和故障轉(zhuǎn)移方式

    Nacos客戶端在從Server獲得服務(wù)時,若出現(xiàn)故障,會通過ServiceInfoHolder和FailoverReactor進行故障轉(zhuǎn)移,ServiceInfoHolder緩存服務(wù)信息,FailoverReactor處理故障轉(zhuǎn)移,包括開啟故障轉(zhuǎn)移開關(guān)、讀取備份文件等
    2024-12-12

最新評論

磐石市| 淅川县| 苏尼特左旗| 渭源县| 平原县| 遂溪县| 外汇| 闻喜县| 柞水县| 甘孜县| 平原县| 临清市| 柳林县| 永嘉县| 且末县| 余江县| 亚东县| 增城市| 北海市| 延津县| 奉化市| 宜君县| 昭通市| 巴马| 宁夏| 玉环县| 永济市| 前郭尔| 朝阳区| 延吉市| 鄂州市| 山阴县| 三都| 乐陵市| 泰兴市| 手机| 宣城市| 汝南县| 濮阳市| 鹿邑县| 万安县|