转载请注明: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——获取成员变量以及构造函数信息
原文地址:http://blog.csdn.net/uniquewonderq/article/details/46591269