Java--Reflect(反射)專題4——擷取成員變數以及建構函式資訊

來源:互聯網
上載者:User

標籤:反射   java   

轉載請註明:http://blog.csdn.net/uniquewonderq


首先寫一個擷取成員變數的靜態方法:

成員變數也是對象,
                是java.lang.reflect.Field類的對象
                Field類封裝了關於成員變數的操作
                getFields()擷取的是所有的public的成員變數的資訊
                getDeclaredFields()擷取的是該類自己聲明的成員變數的資訊,可能是私人的也可能是共有的

       public static  void printFieldMessage(Object obj){            Class c=obj.getClass();//傳遞的是哪個子類的對象,c就是該子類的類類型            /*                成員變數也是對象,                是java.lang.reflect.Field類的對象                Field類封裝了關於成員變數的操作                getFields()擷取的是所有的public的成員變數的資訊                getDeclaredFields()擷取的是該類自己聲明的成員變數的資訊,可能是私人的也可能是共有的                */                Field[] fs;                //fs=c.getFields();                fs=c.getDeclaredFields();                for(Field  field:fs){                    //擷取成員變數類型的類類型,也就是說,如果得到的是int類型的成員變數,那麼返回int.class                    Class fieldType =field.getType();                    String typeName=fieldType.getName();//得到成員變數類型                    //得到成員變數的名字                    String fieldName=field.getName();                    System.out.println("成員變數類型:"+typeName+"    成員變數名為:"+fieldName);                }        }


測試代碼:

    public static void main(String[] args)  {                String s="hello";                Integer integer=8;                //printClassMethodMessage(s);//獲得方法資訊                printFieldMessage(integer);//獲得成員變數資訊               // printConMessage(integer);                        }


測試結果:

run:
成員變數類型:int    成員變數名為:MIN_VALUE
成員變數類型:int    成員變數名為:MAX_VALUE
成員變數類型:java.lang.Class    成員變數名為:TYPE
成員變數類型:[C    成員變數名為:digits
成員變數類型:[C    成員變數名為:DigitTens
成員變數類型:[C    成員變數名為:DigitOnes
成員變數類型:[I    成員變數名為:sizeTable
成員變數類型:int    成員變數名為:value
成員變數類型:int    成員變數名為:SIZE
成員變數類型:int    成員變數名為:BYTES
成員變數類型:long    成員變數名為:serialVersionUID



然後在寫一個擷取對象的構造方法的函數:

建構函式也是對象,
        是java.lang.reflect.Constructor封裝了建構函式的資訊

  public static  void printConMessage(Object obj){        //要想擷取類的資訊,首先獲得它的類類型        Class c=obj.getClass();        /*        建構函式也是對象,        是java.lang.reflect.Constructor封裝了建構函式的資訊        */        Constructor [] cs;        //cs=c.getConstructors();//獲得所有的共有的方法        cs=c.getDeclaredConstructors();//擷取所有的構造方法        for(Constructor constructor:cs){            System.out.print("構造方法  "+constructor.getName()+"(");            //下面擷取建構函式的參數列表,            //得到的是參數列表的類類型            Class[] paramTypes=constructor.getParameterTypes();            for(Class c1:paramTypes){                System.out.print(c1.getName()+",");            }            System.out.print(")");            System.out.println();        }
測試代碼:

 public static void main(String[] args)  {                String s="hello";                //Integer integer=8;                //printClassMethodMessage(s);//獲得方法資訊                //printFieldMessage(integer);//獲得成員變數資訊                printConMessage(s);                        }

測試結果:  即string類的所有構造方法

構造方法  java.lang.String([B,int,int,)
構造方法  java.lang.String([B,java.nio.charset.Charset,)
構造方法  java.lang.String([B,java.lang.String,)
構造方法  java.lang.String([B,int,int,java.nio.charset.Charset,)
構造方法  java.lang.String([B,int,int,java.lang.String,)
構造方法  java.lang.String([C,boolean,)
構造方法  java.lang.String(java.lang.StringBuilder,)
構造方法  java.lang.String(java.lang.StringBuffer,)
構造方法  java.lang.String([B,)
構造方法  java.lang.String([I,int,int,)
構造方法  java.lang.String()
構造方法  java.lang.String([C,)
構造方法  java.lang.String(java.lang.String,)
構造方法  java.lang.String([C,int,int,)
構造方法  java.lang.String([B,int,)
構造方法  java.lang.String([B,int,int,int,)














Java--Reflect(反射)專題4——擷取成員變數以及建構函式資訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.