A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史超 中级黑马   /  2013-12-5 10:09  /  1166 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package Test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class test2 {
        public static void main(String args[]) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException
        {
                Person p = new Person();
                Class c = p.getClass();
                Method m = c.getMethod("setAge", String.class);
                m.invoke(p, "21");
                System.out.println("age:"+p.getAge());
        }
}

class Person
{
         private String name;
         private String age;
         public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public String getAge() {
                return age;
        }
        public void setAge(String age) {
                this.age = age;
        }
       
}


问题:
1,反射机制是什么?
2,为什么要用到反射机制? 上面的例子完全可以new出来用get \ set方法来获取和定义属性值,但是用“反射”,有什么不同之处?

新手,愿听详解,谢谢!


评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

2 个回复

倒序浏览
首先 你的源码有一处错误m.invoke(p, "21");既然你的姓名和年龄都是String类型 那么在p字符的前后 也应该加上""
1 反射根据我自己的理解 是通过一个类的相关信息诸如类名,实例对象,等来获取类中的方法和元素的一种 机制。
2 为什么要用到反射?为了提高程序的扩展性 你知道 当你在编写源码的时候 自己建立了一个javabean 就是你的person类 建好以后 可以方便的用person p=new person()来建立person对象 但如果是这种情况

你的程序已经封装完成 交给了客户 如果客户想用person来建立对象 怎么办?直接拿你的源码来建立么?不太可能吧 这时候反射就派上用场了 只要获取了person的Class对象 就可以建立person对象 而获取Class对象则简单多了 可以通过person.getClass()  Class.forName("com.itheima.person");person.class
然后可以通过设置配置文件的方式 给person赋值 如姓名 年龄
经常见到一些程序 目录下有配置文件 当你配置好以后 程序运行的时候 就可以使用你所配置的参数 而程序编写的时候 根本不知道以后用这个程序的人会给一些什么参数给他 所以提供了配置文件 这也是反射机制的一种具体实现

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
new 就不必用反射了,和ScriptManager类一样,用来执行java代码的,ScriptManager功能多些,反射强悍些
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马