反射的真正用法-有感于网易云课堂传智播客方立勋老师反射视频的小失误
Posted 在天成象
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射的真正用法-有感于网易云课堂传智播客方立勋老师反射视频的小失误相关的知识,希望对你有一定的参考价值。
由于没有经过专业的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的、参数的类型和个数,方老师都详细讲解了该怎样通过反射来调用。
以上是关于反射的真正用法-有感于网易云课堂传智播客方立勋老师反射视频的小失误的主要内容,如果未能解决你的问题,请参考以下文章