Java-反射獲取完整的類信息

純API記錄

  • 反射獲取類信息日志:
package com.stu.java.reflection;
public final class RelectionTest {
private java.lang.String name;
private int age;
private boolean gender;
private java.lang.String desc;
public com.stu.java.reflection.RelectionTest ( ) {}
public com.stu.java.reflection.RelectionTest ( java.lang.String p0,  int p1,  ) {}
public java.lang.String getName( ) {}
public void setName( java.lang.String mp0) {}
public int getAge( ) {}
public void setAge( int mp0) {}
public boolean isGender( ) {}
public void setGender( boolean mp0) {}
public java.lang.String getDesc( ) {}
public void setDesc( java.lang.String mp0) {}
}

  • 準(zhǔn)備一個(gè)測試類 RelectionTest
package com.stu.java.reflection;

final public class RelectionTest {

    private String name;
    private int age;
    private boolean gender;
    private String desc;
    
    public RelectionTest(){}
    
    public RelectionTest(String name, int age) {
        this.name = name;
        this.age = age;
    }

···下面是 setter getter方法

  • 使用反射獲取完整類信息
    private static void relectionClassInfo() throws Exception {

        Class<RelectionTest> c = (Class<RelectionTest>) Class.forName("com.stu.java.reflection.RelectionTest");
        //獲取包信息
        Package pg = c.getPackage();
        LogUtils.sysPrintln("package %s;", pg.getName());

        //獲取類修飾符 public/ final 
        int m = c.getModifiers();
        LogUtils.sysPrint(Modifier.toString(m));

        //判斷類型
        if (Modifier.isInterface(m)) {
            LogUtils.sysPrint(" interface ");
        } else {
            LogUtils.sysPrint(" class ");
        }

        LogUtils.sysPrintln(c.getSimpleName() + " {");


        //獲取類的屬性
        Field[] fields = c.getDeclaredFields();
        for (Field f : fields) {
            //屬性 修飾符
            LogUtils.sysPrint(Modifier.toString(f.getModifiers()));
            //屬性類型
            LogUtils.sysPrint(" " + f.getType().getName());
            //屬性名稱
            LogUtils.sysPrintln(" " + f.getName() + ";");
        }
        //獲取構(gòu)造器
        Constructor[] constructors = c.getDeclaredConstructors();
        for (Constructor con : constructors) {
            LogUtils.sysPrint(Modifier.toString(con.getModifiers()));
            LogUtils.sysPrint(" " + con.getName() + " (");
            //獲取構(gòu)造器參數(shù)
            Class<?>[] ps = con.getParameterTypes();
            for (int i = 0; i < ps.length; i++) {
                Class<?> cl = ps[i];
                LogUtils.sysPrint(" " + cl.getName() + " p%s, ", i);
            }
            LogUtils.sysPrintln(" ) {}");
        }
        //獲取成員方法
        Method[] methods = c.getDeclaredMethods();
        for (Method md : methods) {
            LogUtils.sysPrint(Modifier.toString(md.getModifiers()));
            //獲取返回值類型名稱
            LogUtils.sysPrint(" " + md.getReturnType().getName());
            LogUtils.sysPrint(" " + md.getName() + "( ");
            //獲取方法參數(shù)
            Class<?>[] mPs = md.getParameterTypes();
            for (int i = 0; i < mPs.length; i++) {
                Class<?> mp = mPs[i];
                LogUtils.sysPrint(mp.getName() + " mp%s", +i);
            }
            LogUtils.sysPrintln(") {}");

        }
        LogUtils.sysPrintln("}");

    }


END

參考:https://github.com/HarkBen/JavaSE6Tutorial
補(bǔ)充了獲取構(gòu)造參數(shù)及方法參數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,619評(píng)論 1 32
  • 打開we game熟悉的點(diǎn)開了地下城與勇士,進(jìn)入游戲,跳過檢測,看著登錄頁面的圖畫錚錚地發(fā)神??粗@個(gè)既熟悉又陌生...
    ss毅閱讀 434評(píng)論 1 1
  • 清晨正能量啟動(dòng)朗讀: 在每一個(gè)清晨里,我全心的去感受醒來的自己,這一天是新的,我也是新的,一切都是新的。 昨天無論...
    靜待花開jl閱讀 97評(píng)論 0 1
  • 你真的努力了嗎?還是只是嘴上說說
    crush_9187閱讀 72評(píng)論 0 1
  • 我的答案是:因?yàn)槟愕膵寢屟酃飧摺?/div>
    燈歆先生閱讀 378評(píng)論 0 3

友情鏈接更多精彩內(nèi)容