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

Java反射之Java獲取方法信息實(shí)踐

 更新時(shí)間:2026年05月06日 14:44:27   作者:陽(yáng)光下的米雪  
本文介紹了通過(guò)Java反射機(jī)制獲取類的信息,包括類的名稱、成員方法和成員變量,具體實(shí)現(xiàn)方式包括通過(guò)`getClass()`獲取類類型,使用`Method`類獲取方法對(duì)象,使用`Field`類獲取成員變量信息,文章還提供了完整實(shí)例代碼

本文主要獲取類的信息(包括類的成員函數(shù)、成員變量)

獲取類的信息

前面文章已經(jīng)說(shuō)過(guò)了,有三種方式,本文就不在贅述,采用其中的一種,通過(guò)實(shí)例對(duì)象.getClass()獲取類類型,從而獲取類的名稱

 Class c = obj.getClass();//傳遞的是哪個(gè)子類的對(duì)象,c就是該子類的類類型
 c.getName()
 
public static void main(String[] args) {
        Class c1 = int.class;
        Class c2 = String.class;
        Class c3 = double.class;
        Class c4 = Double.class;
        //void關(guān)鍵字  存在類類型
        Class c5 = void.class;
        System.out.println(c1.getName());
        System.out.println(c2.getName());
        //不包含包名的類名稱
        System.out.println(c2.getSimpleName());
        System.out.println(c3.getName());
        System.out.println(c4.getName());

    }

其中obj是Object obj實(shí)例后的對(duì)象

成員函數(shù)(獲取類的方法對(duì)象)

Method類,方法對(duì)象,一個(gè)成員方法就是一個(gè)Method對(duì)象

  • 獲取的是所有public的函數(shù),包括父類繼承而來(lái)的
getMethods() 方法獲取的是所有public的函數(shù),包括父類繼承而來(lái)的
  • 獲取的是所有該類自己什么的方法
getDeclaredMethods() 獲取的是所有該類自己什么的方法,不論訪問(wèn)權(quán)限
  • 方法的返回值類型的類類型
 Class returnType = ms[i].getReturnType();
  • 得到方法的返回值類型的名稱
returnType.getName()
  • 方法的名稱
ms[i].getName()
  • 獲取參數(shù)類型
Class[] parameterTypes = ms[i].getParameterTypes();

成員變量

成員變量也是對(duì)象,java.lang.reflect.Field, Field類封裝了關(guān)于成員變量的操作

getFields()方法獲取的是所有public的成員變量的信息

getDeclaredFields()獲取的是該類自己聲明的成員變量的信息

  • 獲取成員變量數(shù)組
Field[] fs = c.getDeclaredFields();
  • 獲取成員變量的類型名稱
 Class fieldType = fd.getType();
 String typeName = fieldType.getName();
  • 獲取成員變量的名稱
String fieldName = fd.getName();

完整實(shí)例

ClassUtil

public class ClassUtil {
    /**
     * 打印類的信息,包括類的成員函數(shù)、成員變量
     */
    public static void printClassMessage(Object obj){
        //要獲取類的信息 首先要獲取類的類類型
        Class c = obj.getClass();//傳遞的是哪個(gè)子類的對(duì)象,c就是該子類的類類型
        //獲取類的名稱
        System.out.println("獲取類的名稱:"+c.getName());
        /**
         * Method類,方法對(duì)象
         * 一個(gè)成員方法就是一個(gè)Method對(duì)象
         * getMethods() 方法獲取的是所有public的函數(shù),包括父類繼承而來(lái)的
         * getDeclaredMethods() 獲取的是所有該類自己什么的方法,不論訪問(wèn)權(quán)限
         */
//        Method[] ms = c.getMethods();
        Method[] ms = c.getDeclaredMethods();
        for (int i=0;i<ms.length;i++){
            //得到方法的返回值類型的類類型
            Class returnType = ms[i].getReturnType();
            //得到方法的返回值類型的名稱
            System.out.println(returnType.getName());
            //得到方法的名稱
            System.out.print(ms[i].getName()+"(");
            //獲取參數(shù)類型--->得到的是參數(shù)列表的類型的類類型
            //eg: string ---> 得到String.class
            Class[] parameterTypes = ms[i].getParameterTypes();
            for(Class c1:parameterTypes){
                System.out.print(c1.getName()+",");
            }
            System.out.print(")");
        }
            /**
     * 獲取成員變量
     * @param obj
     */
    public static void printFieldMessage(Object obj){
        //要獲取類的信息 首先要獲取類的類類型
        Class c = obj.getClass();//傳遞的是哪個(gè)子類的對(duì)象,c就是該子類的類類型
        Field[] fs = c.getDeclaredFields();
        for(Field fd:fs){
            //得到成員變量的類型的類類型
            Class fieldType = fd.getType();
            String typeName = fieldType.getName();
            //得到成員變量的名稱
            String fieldName = fd.getName();
            System.out.println(typeName+" "+fieldName);
        }
    }
}

所有public的函數(shù)的方法信息

  public static void main(String[] args) {
        String s= "hello";
        ClassUtil.printClassMessage(s);
        ClassUtil.printFieldMessage(s);
        Integer a = 1;
        ClassUtil.printClassMessage(a);
        ClassUtil.printFieldMessage(a);
    }
  • 運(yùn)行結(jié)果展示:

獲取自己寫的類的方法信息

public class ClassUtil {
    /**
     * 打印類的信息,包括類的成員函數(shù)、成員變量
     */
    public static void printClassMessage(Object obj){
        //要獲取類的信息 首先要獲取類的類類型
        Class c = obj.getClass();//傳遞的是哪個(gè)子類的對(duì)象,c就是該子類的類類型
        //獲取類的名稱
        System.out.println("獲取類的名稱:"+c.getName());
        /**
         * Method類,方法對(duì)象
         * 一個(gè)成員方法就是一個(gè)Method對(duì)象
         * getMethods() 方法獲取的是所有public的函數(shù),包括父類繼承而來(lái)的
         * getDeclaredMethods() 獲取的是所有該類自己什么的方法,不論訪問(wèn)權(quán)限
         */
//        Method[] ms = c.getMethods();
        Method[] ms = c.getDeclaredMethods();
        for (int i=0;i<ms.length;i++){
            //得到方法的返回值類型的類類型
            Class returnType = ms[i].getReturnType();
            //得到方法的返回值類型的名稱
            System.out.println(returnType.getName());
            //得到方法的名稱
            System.out.print(ms[i].getName()+"(");
            //獲取參數(shù)類型--->得到的是參數(shù)列表的類型的類類型
            //eg: string ---> 得到String.class
            Class[] parameterTypes = ms[i].getParameterTypes();
            for(Class c1:parameterTypes){
                System.out.print(c1.getName()+",");
            }
            System.out.print(")");
        }
    }

    public static void main(String[] args) {
        ThemeInfo themeInfo = new ThemeInfo();
        themeInfo.setId("1");
        ClassUtil.printClassMessage(themeInfo);
        ClassUtil.printFieldMessage(themeInfo);
    }
}

運(yùn)行結(jié)果展示:

  • 成員方法:

  • 成員變量:

總結(jié)

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

相關(guān)文章

  • SpringData @Query和@Modifying注解原理解析

    SpringData @Query和@Modifying注解原理解析

    這篇文章主要介紹了SpringData @Query和@Modifying注解原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java IO數(shù)據(jù)操作流、對(duì)象序列化、壓縮流代碼解析

    java IO數(shù)據(jù)操作流、對(duì)象序列化、壓縮流代碼解析

    這篇文章主要介紹了java IO數(shù)據(jù)操作流、對(duì)象序列化、壓縮流代碼解析,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Springboot啟動(dòng)流程詳細(xì)分析

    Springboot啟動(dòng)流程詳細(xì)分析

    這篇文章主要介紹了SpringBoot啟動(dòng)過(guò)程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-12-12
  • java 異常被catch后 將會(huì)繼續(xù)執(zhí)行的操作

    java 異常被catch后 將會(huì)繼續(xù)執(zhí)行的操作

    這篇文章主要介紹了java 異常被catch后 將會(huì)繼續(xù)執(zhí)行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Springcloud之Gateway組件詳解

    Springcloud之Gateway組件詳解

    Spring Cloud Gateway是Spring Cloud微服務(wù)生態(tài)下的網(wǎng)關(guān)組件。Spring Cloud Gateway是基于Spring 5和Spring Boot 2搭建的,本質(zhì)上是一個(gè)Spring Boot應(yīng)用。本文詳細(xì)介紹了SpringCloud的網(wǎng)關(guān)組件 Gateway,,需要的朋友可以參考下
    2023-05-05
  • java多線程編程之為什么要進(jìn)行數(shù)據(jù)同步

    java多線程編程之為什么要進(jìn)行數(shù)據(jù)同步

    數(shù)據(jù)同步就是指在同一時(shí)間,只能由一個(gè)線程來(lái)訪問(wèn)被同步的類變量,當(dāng)前線程訪問(wèn)完這些變量后,其他線程才能繼續(xù)訪問(wèn),下面看一下為什么要進(jìn)行數(shù)據(jù)同步
    2014-01-01
  • LinkedHashMap如何保證有序問(wèn)題

    LinkedHashMap如何保證有序問(wèn)題

    這篇文章主要介紹了LinkedHashMap如何保證有序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 一文了解Java讀寫鎖ReentrantReadWriteLock的使用

    一文了解Java讀寫鎖ReentrantReadWriteLock的使用

    ReentrantReadWriteLock稱為讀寫鎖,它提供一個(gè)讀鎖,支持多個(gè)線程共享同一把鎖。這篇文章主要講解一下ReentrantReadWriteLock的使用和應(yīng)用場(chǎng)景,感興趣的可以了解一下
    2022-10-10
  • Java利用Poi讀取excel并對(duì)所有類型進(jìn)行處理

    Java利用Poi讀取excel并對(duì)所有類型進(jìn)行處理

    這篇文章主要為大家詳細(xì)介紹了Java利用Poi讀取excel并對(duì)所有類型進(jìn)行處理的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2024-01-01
  • Java異常處理的五個(gè)關(guān)鍵字

    Java異常處理的五個(gè)關(guān)鍵字

    本篇文章給大家詳細(xì)講述了關(guān)于Java異常處理的相關(guān)知識(shí)點(diǎn),并列舉了5個(gè)重要關(guān)鍵字,一起啊參考學(xué)下。
    2018-03-03

最新評(píng)論

新泰市| 大余县| 常熟市| 观塘区| 大悟县| 从江县| 简阳市| 登封市| 通榆县| 土默特右旗| 岗巴县| 大理市| 崇州市| 株洲市| 陇川县| 阜南县| 鹤壁市| 通榆县| 丽水市| 波密县| 灌阳县| 手游| 新巴尔虎右旗| 湖北省| 板桥市| 隆德县| 太白县| 家居| 商水县| 玉树县| 台东县| 郧西县| 长岭县| 杂多县| 桃园县| 中阳县| 潍坊市| 兴城市| 革吉县| 嘉兴市| 兴化市|