成员变量也是对象
是java.lang.reflect.Field类的对象
Field封装了关于成员变量的操作
getFields()方法获取的是所有的public的成员变量的信息
getDeclaredFields获取的是该类自己声明的成员变量的信息
public static void printFieldMessage(Object object) {
Class c = object.getClass();
Field[] fields = c.getDeclaredFields();
for(Field field : fields) {
//得到成员变量的类型的类类型
Class fieldType = field.getType(); //int.class
String typeName = fieldType.getName();
//得到了成员变量的名称
String fieldName = field.getName();
System.out.println(typeName + " " + fieldName);
}
}
构造函数同样也是对象
/**
* 打印对象构造函数的信息
* @param obj
*/
public static void printConMessage(Object obj) {
Class c = obj.getClass();
/**
* 构造函数也是对象
* java.lang.Constructor中封装了构造函数的信息
* getConstructors获取所有的public的构造函数
* getDeclaredConstructors获取本类声明的所有构造方法
*/
Constructor[] cs = c.getDeclaredConstructors();
for(Constructor constructor:cs) {
//构造方法没有返回值类型
System.out.print(constructor.getName()+"(");
//获取构造函数的参数列表
Class[] params = constructor.getParameterTypes();
for(Class param : params) {
System.out.print(param.getName()+",");
}
System.out.println(")");
}
}
测试类:
public class ClassDemo5 {
public static void main(String[] args) {
ClassUtil.printConMessage("hello");
}
}
执行结果:
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,)