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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王振2014 中级黑马   /  2014-6-23 16:32  /  1220 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

假如有一个Person类,我们想要用反射来调用它的getName(String name)方法,它返回一个字符串
Class c = Person.class;
Method m = c.getMethod("getName",String.class);
然后使用invoke方法,但是他需要一个对象参数
object obj = (Person)c.newInstance();
String name = (String) m.invoke(obj,"wang");
我不明白的是都已经实例化一个对象obj了,直接obj.getName("wang")不就O了,为啥还费劲啊。


评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

7 个回复

倒序浏览
反射是做框架用的,你在写框架的时候还不知道你要用到的对象有什么方法。框架是先于你写这个Person类先写好的。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
不怎么明白
回复 使用道具 举报
123_yaya 发表于 2014-6-23 16:58
反射是做框架用的,你在写框架的时候还不知道你要用到的对象有什么方法。框架是先于你写这个Person类先写好 ...

澳,这种情况只是针对类的继承吧,比如我们新写的类继承原有的抽象类;
如果是接口的话,只能覆写原有的方法吧,类才能写自己的方法。
对不对啊?
回复 使用道具 举报
王振2014 发表于 2014-6-24 09:57
澳,这种情况只是针对类的继承吧,比如我们新写的类继承原有的抽象类;
如果是接口的话,只能覆写原有的 ...

有点看不懂你说的是什么,不知道有没有理解错。
不是只能针对类的继承哦,这是反射的一种应用情况。对于一个对象,你要增强该对象的某个特定方法,你可以用代理,继承,装饰设计模式。用代理的好处是你可以简化代码,只对于你要增强的那个特定方法进行处理即可,其他都是用原来的方法。
反射可以用作框架的一个例子就是,你写一个开源的将封装在List集合里面的数据导出到Excel中,这时候你是先写好这个框架,别人用的时候只需要把List传进来即可。但是你写框架导出excel的时候,你要知道List里面的封装数据是哪些啊?这时候你就要用到反射把List里面的方法反射出来来获得数据。同样你要用别人的框架你就要遵循别人的一些规则,比如你封装在LIst集合中的数据要实现哪些方法啊之类的。这就是框架。
个人理解哦。。有错欢迎指点~~~
回复 使用道具 举报
123_yaya 发表于 2014-6-24 11:28
有点看不懂你说的是什么,不知道有没有理解错。
不是只能针对类的继承哦,这是反射的一种应用情况。对于 ...

谢谢指导
回复 使用道具 举报
123_yaya 发表于 2014-6-24 11:28
有点看不懂你说的是什么,不知道有没有理解错。
不是只能针对类的继承哦,这是反射的一种应用情况。对于 ...

顺便问一下面试和面试前的测试题有没有类加载机制和代理的题啊
回复 使用道具 举报
王振2014 发表于 2014-6-24 12:08
顺便问一下面试和面试前的测试题有没有类加载机制和代理的题啊

我没被问到~~~不知道其他人噢。高新我看了两遍写了两遍的~~~其实觉得张老师说得很好啊~~特别类加载器看第二遍时好很多了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马