浅谈Java中的反射机制

转载请注明出处:http://blog.csdn.net/qq_15002323/article/details/51076816

一、什么是反射机制

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

二、实例分析

案例实体类Person:

class Person {

        private String name;

        private int age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        @Override
        public String toString() {
            return "name:" + getName() + ";age:" + getAge();
        }
    }

1.通过类名获取所有属性和方法

    Class<Person> per = Person.class;
    // 获取该类所有申明的字段
    Field[] fields = per.getDeclaredFields();
    // 获取该类所有申明的方法
    Method[] methods = per.getDeclaredMethods();
    System.out.println("field:");
    for (Field field : fields) {
        System.out.println(field.getName());
    }
    System.out.println("-------------------------");
    System.out.println("method:");
    for (Method method : methods) {
        System.out.println(method.getName());
    }

注:注意getXXX()和getDeclaredXXX(),前者是获取公有public(不能获取除public外的例如private)的属性(或方法),后者是获取类中所有申明的属性(或方法)。

2.通过任意一个对象,调用它的任意一个方法和属性

    Class<Person> per = Person.class;
    Person person = per.newInstance();
    Method setName = per.getDeclaredMethod("setName", String.class);
    Method setAge = per.getDeclaredMethod("setAge", int.class);
    setName.invoke(person, "锐萌萌");
    setAge.invoke(person, 18);
    System.out.print(person.toString());

注:调用Class的newInstance()实例对象时一定要保证该类存在无参构造方法(没写默认有),否则抛出异常;getDeclaredMethod方法第一个参数是方法名,后面是参数类型。

三、开发中的应用

开发人员都是很懒的(起码我是这样),都期望着所有的交互都可以写成一个通用的模块,例如在线映射数据保存至数据库,这个就非常有必要用到反射。

具体实现代码,后期编写中。。。

你可能感兴趣的:(java,反射)