黑马程序员技术交流社区
标题:
谁给我讲讲反射到底有啥用?
[打印本页]
作者:
夜默
时间:
2013-8-26 18:31
标题:
谁给我讲讲反射到底有啥用?
反射能做到的,我自己用一般方法都能解决,反射到底简单在哪?
作者:
黄兴旺
时间:
2013-8-26 18:38
额....我也要问问
作者:
HM张博文
时间:
2013-8-26 18:44
一个类封装以后,里面的属性和方法是看不到的,但通过反射的方式可以得到
作者:
xscn
时间:
2013-8-26 18:49
本帖最后由 xscn 于 2013-8-26 19:01 编辑
不用反射可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods内容体),并生成其对象实体、或者对其fields设值、唤起其methods吗???
只要得到一个类的字节码,反射就能完成上面的所有操作,用普通方法怎么做出来?其实字节码这个词太不容易理解了,我觉得翻译成类模板更合适。
作者:
星仔子
时间:
2013-8-26 19:32
[1]. 陈述反射的好处
传统方法操作字段,创建对象并调用对象的的构造方法在步骤上一定是比用反射来操作要简单。但是传统的方法来操作却有很多特殊的地方使得写出的程序无法通用化。这个时候,反射的好处就彰显出来。反射给出的程序框架适合任何类型的程序。一旦涉及到程序种特殊的地方在反射中全部采用字符串的形式进行了传参。
[2]. 举例说明
假设有一个Person类,现在采用传统的方法作如下操作
class Person{
public void paramMethod(String name, int age){
System.out.println(name+"**"+age);
}
}
复制代码
测试代码
Person p =new Person();
p.paramMethod("Benjamin", 110);
复制代码
从这段代码看,类名Person、类中所使用的方法paramMethod必须硬编码写入程序。如果想改借助这段代码成调用Student类的xxx方法,是没有办法重用的。但是 通过反射可以做到这一点。
我在这里把
类名Person、类中所使用的方法paramMethod称为采用使用传统方法中的涉及到的程序的个性化地方。那么这些个性化的地方在反射中采用字符串的形式进行了格式化。格式化之后,可以达到通用的效果。因此反射同样的一段代码,通过传入不同的字符串参数实现了对不同类名和不同方法名的操作。这样既可以做成通用的程序框架。我下面画了一个图来表示反射和传统方法的对应关系。
从图中可以看出,原本传统操作特殊的部分Perosn和parmaMethod都在反射中都变成了字符串的形式出现。这样变换字符串的内容就可以操作其他类的不同名的方法。这就是反射对传统程序的格式化和通用化。反射的这种功能为框架技术奠定了基础,即同样的一套程序可以操作用户未知的类和类中的方法。
结论:反射就是对传统方法操作对象的
格式化
new和Method.jpg
(224.92 KB, 下载次数: 15)
下载附件
2013-8-26 19:29 上传
反射和传统的区别
作者:
macouen
时间:
2013-8-27 10:14
JAVA反射机制是在运行状态中,对于任意一个类 (class文件),都能够知道这个类的所有属性和方法;
* 对于任意一个对象,都能够调用它的任意一个方法和属性;
* 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
*
* 动态获取类中信息,就是java反射 。
* 可以理解为对类的解剖。
作者:
薛鹏鹏
时间:
2013-8-27 10:44
框架的时候需要用反射。还有就是访问私有的和动态代理的时候也需要
如果知识普通的调用,当然还是一般方法简单。
作者:
『隐』释回忆
时间:
2013-8-27 11:40
一个框架的某一部分已经想到用什么功能,那么给这个框架定义一个空间位置来存放这个,这个时候提供这个功能的类还没出现,不过向外提供了类名称,我们就可以给这个类定义功能,这个功能我们自己定义...
感觉就是提供了扩展性,不过破坏了安全性什么的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2