码迷,mamicode.com
首页 > 其他好文 > 详细

反射的真正用法-有感于网易云课堂传智播客方立勋老师反射视频的小失误

时间:2016-05-27 20:20:29      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:

由于没有经过专业的java学习,所以我喜欢看各个比较著名的java讲师的视频。最近就是在看方立勋老师的视频,但是在看反射的时候(课时12~16),发现有点问题。

方老师在讲反射的时候说:如果具体要调用的类及类的方法是由使用者传入,而编程者不知道会传入什么,那么这时候就要使用反射。通过反射加载类,然后执行方法。例如jdbc里面数据库驱动类就是用到了反射。

但是方老师的视频里,他所讲的例子却实实在在的使用了new 构造方法,下面是他写的例子:

Class clazz=Class.forName("com.learn.reflect.Person");   ---这个类名和下一行的方法名都是使用者传入的
Method m=clazz.getMethod("print3", String[].class);
Person p=new Person();
m.invoke(p,(Object)new String[]{"1","23"});

当时看完之后还觉得讲的挺好的。但是今天看第二遍时却发现情况不对:Person p=new Person();   红色区域的这段代码是什么鬼?不是说好的不知道要传入哪个对象吗?怎么就new了对象? 然后请教了坐我旁边的开发员同事,终于搞明白了其实反射不是这样用的,上面的代码根本就不能用来编写反射代码。真正的反射用法是这样:

Class clazz=Class.forName("com.learn.reflect.Person");--首先还是加载目标类

Object obj=clazz.newInstence;

Method m=clazz.getMethod("print3", String[].class); --String[].class和"print3"都是使用者传进来的。

m.invoke(obj,(Object)new String[]{"1","23"});

注:以上讲的是通过反射运行目标类的目标方法。通过反射获得目标类的目标属性的方法因为不需要用到对象,所以可以看方老师的视频。

另:本人没有黑方老师的意思,因为:1.本人不觉的方老师非要清清楚楚的把每个方面都讲到  2.本人也黑不了方老师。本人对于传道授业的方老师很感激,所以称呼他为方老师,受他影响,我也把这点发现分享出来。 12~16这5个课时疵不掩瑕,方老师讲得很详细,关于方法是否有返回值、是不是public的、参数的类型和个数,方老师都详细讲解了该怎样通过反射来调用。

 

反射的真正用法-有感于网易云课堂传智播客方立勋老师反射视频的小失误

标签:

原文地址:http://www.cnblogs.com/jefzha/p/5535639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!