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

来源:互联网 发布:华为网络 编辑:程序博客网 时间:2024/05/17 23:54

转载请注明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,)














0 0
原创粉丝点击