您的位置:首页 > 编程语言 > Java开发

Java--Reflect(反射)专题4——获取成员变量以及构造函数信息

2015-06-22 08:39 731 查看
转载请注明: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,)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: