直接看代码
packagepractive.Reflect;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.Method;/***获得类的信息(成员方法,成员变量,构造方法)*@Author:言曌*@Date:/11/16*@Time:下午10:06*/publicclassClassUtil{publicstaticvoidprintMrthodMessage(Objectobj){//获取类的信息,首先要获取类的类类型Classc=obj.getClass();//传递是哪个子类的对象,c就是该子类的类类型//获取类的名称System.out.println("类的名称:"+c.getName());/***Method类,方法对象*一个成员方法是一个Method对象*getMethods()方法获取的是所有public的函数,包括继承而来的*getDeclaredMethods()获取的是所有该类的声明的方法,不问访问权限*/Method[]ms=c.getMethods();for(inti=0;i<ms.length;i++){//获得方法的返回值类型的类类型ClassreturnType=ms[i].getReturnType();System.out.print(returnType+"");//得到方法名System.out.print(ms[i].getName()+"(");//获得参数类型-->得到的是参数列表的类型的类类型Class[]paramTypes=ms[i].getParameterTypes();for(Classclass1:paramTypes){System.out.print(class1.getName()+",");}System.out.print(")");System.out.println();}}publicstaticvoidprintFieldMessage(Objectobj){Classc=obj.getClass();/***成员变量也是对象*java.lang.reflect.Field*Field类封装了关于成员变量的操作*getFields()方法获取的是所有的public的成员变量的信息*getDeclaredFields()获取的是该类自己声明的成员变量的信息*///Field[]fs=c.getFields();Field[]fs=c.getDeclaredFields();for(Fieldfield:fs){//得到成员变量的类型的类类型ClassfieldType=field.getType();StringtypeName=fieldType.getTypeName();//获得成员变量的名称StringfieldName=field.getName();System.out.println(typeName+""+fieldName);}}publicstaticvoidprintConMessage(Objectobj){Classc=obj.getClass();/***构造函数也是对象*java.lang.Constructor中封装了构造函数的信息*getConstructors获取所有的public的构造函数*getDeclaredConstuctors()得到所有的构造函数*///Constructor[]cs=c.getConstructors();Constructor[]cs=c.getDeclaredConstructors();for(Constructorconstructor:cs){System.out.print(constructor.getName()+"(");//获取构造函数的参数列表-->得到的是参数列表的类类型Class[]paramTypes=constructor.getParameterTypes();for(Classclass1:paramTypes){System.out.print(class1.getName()+",");}System.out.print(")");System.out.println();}}}
然后写一个类来测试
packagepractive.Reflect;/***@Author:言曌*@Date:/11/16*@Time:下午10:30*/publicclassClassDemo2{publicstaticvoidmain(Stringargs[]){ClassUtil.printMethodMessage("hello");ClassUtil.printMethodMessage(newInteger(1));//ClassUtil.printFieldMessage("hello");ClassUtil.printFieldMessage(newInteger(1));//ClassUtil.printConMessage("hello");ClassUtil.printConMessage(newInteger(1));}}