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

由于没有经过专业的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的、参数的类型和个数,方老师都详细讲解了该怎样通过反射来调用。

时间: 2024-10-11 14:09:42

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

传智播客《巴巴运动网视频教程(11-106)》avi格式以及兴许44集视频包括所有源码和资源

(1)网上找巴巴运动网代码资源的时候找了非常久 基本上都是须要各种积分的 最终找到了一个不须要积分的推荐给大家.(支持迅雷下载) (2)兴许44集的jar包和项目文档等下载地址! watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGxnZW4xNTczODc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /> 以上分享资源不须要不论什么积分

网易云课堂-软件工程(C编码实践篇)

网易云课堂-软件工程(C编程实践篇) 识别代码工程质量: 代码风格: 封装接口: 可重用代码: 可重入函数和线程安全: 代码风格的原则:简明.易读.无二义性:代码风格原则在团队交流过程中非常重要.

聊一聊【网易云课堂】

(首先说明,这不是广告,知识我个人的一点感受而已) 若干天之前注册了网易云课堂,并填写.邮寄申请讲师的材料. 若干天之后的今天,终于收到通知,我通过了讲师认证,给我名字上加了个大大的"V".以及<petshop4.0源码解读>教程通过了审核,正式发布了.下班之前看了看,竟然已经有6名学习者了,就是不知道他们有没有真的学.有想学的直接去那里看就行了,免费的. 课堂教程的网址是:http://study.163.com/course/introduction/655003.ht

网易云课堂_C++程序设计入门(上)_第2单元:丹青画松石– EGE图形库_第2节:一个简单的EGE程序

网易云课堂_C++程序设计入门(上)_第2单元:丹青画松石– EGE图形库_第2节:一个简单的EGE程序 #ifndef _GRAPHICS_H_ #define _GRAPHICS_H_ #ifndef __cplusplus #error You must use C++ compiler, or you need filename with '.cpp' suffix #endif #include "ege.h" using namespace ege; #endif #inc

网易云课堂程序设计入门--C语言第七周:指针与字符串学习笔记

====================================== 第七周:指针与字符串学习笔记 网易云课堂 程序设计入门–C语言 指针与字符串 学习笔记 ====================================== 7-1指针初步 7-1-1类型大小与取地址运算 sizeof是一个运算符 给出某个变量货类型在内存中所占据的字节数 sizeof(int); sizeif(i); double变量在内存中占据的空间是int变量的两倍 { int a; a =6; prin

Python实例之抓取网易云课堂搜索数据(post方式json型数据)并保存为TXT

本实例实现了抓取网易云课堂中以'java'为关键字的搜索结果,经详细查看请求的方式为post,请求的结果为JSON数据 具体实现代码如下: import requests import json finalstr = '' #初始化字符串 totlePage = 0 #初始化总页数 test = 0 #初始化数据总条数 url = 'http://study.163.com/p/search/studycourse.json' headers = {'content-type': 'applic

Android 网易云课堂第一周笔记16/5/10

Android 网易云课堂第一周笔记 首先第一周的主要任务回顾,第一是Android环境的搭建和Android studio软件的安装使用.第二是android的hello word项目的构建,其他的项目的功能包括button的功能基本使用,比如页面的跳转,Toast,Intent等等,还有我认为最为重要的是Activity的生命活动的讲解,虽然老师在课堂上只是简单展示一下生命周期的几个内容,但我认为如果想玩好Activity的话,生命周期这一块一定要理解和掌握的,废话不多说直接进入正题. An

?《Python自动化测试修炼宝典》线上课程已经成功入驻网易云课堂......

<Python自动化测试修炼宝典>线上课程已经成功入驻网易云课堂...... IT测试老兵利用工作之余,亲自录制的<Python自动化测试修炼宝典>线上课程已经成功入驻网易云课堂,想要提高测试技术的小伙伴可以线上购买课程进行学习. 课程背景 测试人员进阶实战课程.本套课程以作者多年测试实战经验为背景,结合大量测试案例深入浅出讲解目前主流web端.app端自动化测试框架以及使用Python如何从0到1实现接口测试框架的搭建. 课程特色 系统教学+实战案例+开放源码.涵盖Python3

网易云课堂_C++开发入门到精通_章节2:引用和函数的高级用法

课时6函数重载 函数重载 在C语言头文件中的extern "C" //常见的C语言头文件格式 #ifndef _FUNC_ #define _FUNC_ #ifdef __cplusplus extern "C" { #endif // __cplusplus void func(); #ifdef __cplusplus } #endif // __cplusplus #endif