学学Java反射

来源:互联网 发布:win7网络发现无法启用 编辑:程序博客网 时间:2024/06/05 03:49

先看看别人的一篇文章

Java中的反射


基本概念可以参考上面那篇文章,这里不多少,直接上代码,撸起。

package reflact_demo;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * ClassUtil.java 封装一些反射的操作 * Created by Administrator on 2017/1/5. */public class ClassUtil {    /**     * 打印类的信息,包括类的成员函数、成员变量(只获取成员函数)     */    public static void printClassMethodMessage(Object obj){        Class c = obj.getClass();        System.out.println("类的名称是:" + c.getName());        Method []ms = c.getMethods();        for (int i = 0; i < ms.length; i++) {            Class returnType = ms[i].getReturnType();            System.out.print(returnType.getName()+" ");            //得到的方法名称            System.out.print(ms[i].getName()+"(");            //获取参数类型            Class[] paramTypes = ms[i].getParameterTypes();            for (Class c1:paramTypes) {                System.out.print(c1.getName()+",");            }            System.out.println(")");        }    }    /**     * 获取成员变量的信息     */    public static void printFieldMessage(Object obj){        Class c = obj.getClass();        /*         * 成员变量也是对象         * java.lang.reflect.Field         * Field类封装了关于成员变量的操作         * getFields()方法获取的是所有的public的成员变量的信息         * getDeclaredFields获取的是该类自己声明的成员变量的信息         */        Field[] fs = c.getDeclaredFields();        for (Field f : fs) {            //得到成员变量的类型的类类型            Class fieldType = f.getType();            String typeName = fieldType.getName();            //得到成员变量的名称            String fieldName = f.getName();            System.out.println(typeName + " " + fieldName);        }    }    /**     * 打印对象的构造函数信息     */    public static void printConMessage(Object obj){        Class c = obj.getClass();        /*         * 构造函数也是对象         * java.lang. Constructor中封装了构造函数的信息         * getConstructors获取所有的public的构造函数         * getDeclaredConstructors得到所有的构造函数         */        Constructor[] cs = c.getDeclaredConstructors();        for ( Constructor con : cs ) {            System.out.println("构造函数:");            System.out.print(con.getName()+"(");            //获取构造函数的参数列表--->得到的是参数列表的类类型            Class[] paramTypes = con.getParameterTypes();            for (Class c1 : paramTypes ) {                System.out.print(c1.getName() + ",");            }            System.out.println(")");        }    }}

写个方法测试一下

package reflact_demo;import java.io.BufferedReader;import java.io.InputStreamReader;import java.lang.reflect.Method;/** * MethodDemo.java * Created by Administrator on 2017/1/5. */public class MethodDemo {    private static UserService us = new UserService();    public static void main(String[] args){           ClassUtil.printClassMethodMessage(MethodDemo.class);             //ClassUtil.printFieldMessage(MethodDemo.class);       // ClassUtil.printConMessage(MethodDemo.class);    }}
//UserService.classpublic class UserService {    public void delete(){        System.out.println("删除用户");    }    public void update(){        System.out.println("修改用户");    }    public void find(){        System.out.println("查找用户");    }}

其中一个方法测试结果:
这里写图片描述

0 0
原创粉丝点击