要想得到一个类的信息,首先要拿到这个类的类类型
public class ClassUtil {
/**
* 打印类的信息,包括类的成员函数,成员变量
* @param object 拿到该对象所属类的信息
*/
public static void printClassMessage(Object object){
Class c = object.getClass();
System.out.println("类的名称是:"+c.getName());
/**
* Method类,方法对象
* 一个成员方法就是一个Method对象
* getMethods()获取的是所有public的函数,包括父类继承而来的
* getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限
*/
Method[] methods = c.getMethods();
for(int i=0;i<methods.length;i++){
Class returnType = methods[i].getReturnType();
System.out.print(returnType.getName()+" ");
System.out.print(methods[i].getName()+"(");
Class[] paramTypes = methods[i].getParameterTypes();
for(Class class1:paramTypes){
System.out.print(class1.getName()+",");
}
System.out.println(")");
/**
* 成员变量也是对象
* java.lang.reflect.Field
* Field类封装了关于成员变量的操作
* getFields()获取的是所有public的成员变量的信息
*getDeclaredMethods()获取的是该类自己声明的成员信息
*/
Field[] fields = c.getFields();
for(Field field:fields){
Class fieldType = field.getType();
String typeName = fieldType.getName();
String fieldName = field.getName();
System.out.println(typeName +" "+fieldName);
}
/**
* 对象的构造函数的信息
* 构造函数也是对象:java.lang.reflect.Constructor
* getConstructors获取所有的public的构造函数
* getDeclaredConstructors获取所有构造函数
* 构造函数都是要自己声明的
*/
Constructor[] constructors = c.getConstructors();
for(Constructor constructor :constructors){
System.out.println(constructor.getName());
Class[] types = constructor.getParameterTypes();
for(Class type:types){
System.out.println(type.getName()+",");
}
}