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

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

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

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

獲取類的信息

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

 Class c = obj.getClass();//傳遞的是哪個子類的對象,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í)例后的對象

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

Method類,方法對象,一個成員方法就是一個Method對象

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

成員變量

成員變量也是對象,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();//傳遞的是哪個子類的對象,c就是該子類的類類型
        //獲取類的名稱
        System.out.println("獲取類的名稱:"+c.getName());
        /**
         * Method類,方法對象
         * 一個成員方法就是一個Method對象
         * getMethods() 方法獲取的是所有public的函數(shù),包括父類繼承而來的
         * getDeclaredMethods() 獲取的是所有該類自己什么的方法,不論訪問權(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();//傳遞的是哪個子類的對象,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();//傳遞的是哪個子類的對象,c就是該子類的類類型
        //獲取類的名稱
        System.out.println("獲取類的名稱:"+c.getName());
        /**
         * Method類,方法對象
         * 一個成員方法就是一個Method對象
         * getMethods() 方法獲取的是所有public的函數(shù),包括父類繼承而來的
         * getDeclaredMethods() 獲取的是所有該類自己什么的方法,不論訪問權(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é)

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

相關(guān)文章

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

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

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

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

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

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

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

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

    這篇文章主要介紹了java 異常被catch后 將會繼續(xù)執(zhí)行的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    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ì)上是一個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ù)同步就是指在同一時間,只能由一個線程來訪問被同步的類變量,當(dāng)前線程訪問完這些變量后,其他線程才能繼續(xù)訪問,下面看一下為什么要進(jìn)行數(shù)據(jù)同步
    2014-01-01
  • LinkedHashMap如何保證有序問題

    LinkedHashMap如何保證有序問題

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

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

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

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

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

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

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

最新評論

方城县| 山阴县| 巍山| 金乡县| 孙吴县| 南和县| 北川| 大竹县| 莱州市| 奎屯市| 洛阳市| 巨鹿县| 固镇县| 丹巴县| 同心县| 古浪县| 洮南市| 昆山市| 邵武市| 马龙县| 安塞县| 二连浩特市| 武山县| 荔波县| 赫章县| 靖边县| 正镶白旗| 萍乡市| 油尖旺区| 佛学| 北京市| 宽城| 普定县| 荣成市| 崇文区| 万安县| 措美县| 邯郸县| 上饶县| 西林县| 通化县|