直接看代码
然后写一个类来测试
- package practive.Reflect;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- /**
- * 获得类的信息(成员方法,成员变量,构造方法)
- * @Author: 言曌
- * @Date: 2017/11/16
- * @Time: 下午10:06
- */
- public class ClassUtil {
- public static void printMrthodMessage(Object obj) {
- //获取类的信息,首先要获取类的类类型
- Class c = obj.getClass();//传递是哪个子类的对象,c 就是该子类的类类型
- //获取类的名称
- System.out.println("类的名称:"+c.getName());
- /**
- * Method类,方法对象
- * 一个成员方法是一个Method对象
- * getMethods()方法获取的是所有public的函数,包括继承而来的
- * getDeclaredMethods()获取的是所有该类的声明的方法,不问访问权限
- */
- Method[] ms = c.getMethods();
- for(int i=0;i<ms.length;i++) {
- //获得方法的返回值类型的类类型
- Class returnType = ms[i].getReturnType();
- System.out.print(returnType+" ");
- //得到方法名
- System.out.print(ms[i].getName()+"(");
- //获得参数类型-->得到的是参数列表的类型的类类型
- Class[] paramTypes = ms[i].getParameterTypes();
- for(Class class1 : paramTypes) {
- System.out.print(class1.getName()+",");
- }
- System.out.print(")");
- System.out.println();
- }
- }
- public static void printFieldMessage(Object obj) {
- Class c = obj.getClass();
- /**
- * 成员变量也是对象
- * java.lang.reflect.Field
- * Field类封装了关于成员变量的操作
- * getFields()方法获取的是所有的public的成员变量的信息
- * getDeclaredFields()获取的是该类自己声明的成员变量的信息
- */
- //Field[] fs = c.getFields();
- Field[] fs = c.getDeclaredFields();
- for(Field field : fs) {
- //得到成员变量的类型的类类型
- Class fieldType = field.getType();
- String typeName = fieldType.getTypeName();
- //获得成员变量的名称
- String fieldName = field.getName();
- System.out.println(typeName+" "+fieldName);
- }
- }
- public static void printConMessage(Object obj) {
- Class c = obj.getClass();
- /**
- * 构造函数也是对象
- * java.lang.Constructor中封装了构造函数的信息
- * getConstructors获取所有的public的构造函数
- * getDeclaredConstuctors()得到所有的构造函数
- */
- //Constructor[] cs = c.getConstructors();
- Constructor[] cs = c.getDeclaredConstructors();
- for(Constructor constructor:cs) {
- System.out.print(constructor.getName()+"(");
- //获取构造函数的参数列表-->得到的是参数列表的类类型
- Class[] paramTypes = constructor.getParameterTypes();
- for(Class class1:paramTypes) {
- System.out.print(class1.getName()+",");
- }
- System.out.print(")");
- System.out.println();
- }
- }
- }
然后写一个类来测试
- package practive.Reflect;
- /**
- * @Author: 言曌
- * @Date: 2017/11/16
- * @Time: 下午10:30
- */
- public class ClassDemo2 {
- public static void main(String args[]) {
- ClassUtil.printMethodMessage("hello");
- ClassUtil.printMethodMessage(new Integer(1));
- //ClassUtil.printFieldMessage("hello");
- ClassUtil.printFieldMessage(new Integer(1));
- //ClassUtil.printConMessage("hello");
- ClassUtil.printConMessage(new Integer(1));
- }
- }
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏