当前位置: 代码迷 >> J2SE >> 反射概念明白了,但是反射干嘛用的又不明白了,哪位大神能帮小弟我解释一下
  详细解决方案

反射概念明白了,但是反射干嘛用的又不明白了,哪位大神能帮小弟我解释一下

热度:42   发布时间:2016-04-23 20:01:35.0
反射概念明白了,但是反射干嘛用的又不明白了,哪位大神能帮我解释一下。
反射(Reflection):是java 被视为动态(或准动态)语言的一个关键性质。这个机制

允许程序在运行时通过Reflecttion APIs 取得任意一个已知名称的class 的内部信

息,包括其修饰符(诸如public static 等等)父类(例如Object) 实现之接口(例

如serializable),也包括成员变量和方法的所有信息,并可于运行时改变成员变量的内

容或者调用方法(包括私有方法,我们知道被private 修饰的封装的机制,是不能被外部

所使用的,但是通过反射,我们可以改变私有变量和方法)。
反射概念看了好久,还是没怎么明白,鄙人有如下问题:
(1)通过反射就可以修改私有的方法和变量,那么会不会不安全呢?
(2)反射到底在java编程中有哪些运用呢

------解决思路----------------------
(1)安全只是相对的。。
我以前做过点反射的东东。做的是从一段数据中用正则提取一些需要的内容,比如姓名,年龄等等。然后要把它们组成User类(当然还有更多entity类)保存到数据库。提取的内容为<正则组名,相应内容>map类,然后根据“set+正则组名”调用传入类的setXXX方法设置属性值。
本人新手,相互学习哈
------解决思路----------------------
反射一般为了基于组件的应用创建工具而设计的,这些工具需要根据需要装入类,反射功能只是在设计时被用到,普通应用程序不应通过反射方式访问对象,还有一些情况是编译时无法获取需要的类,但是在编译时存在适当的接口或者超类,让程序可以引用.

有一个规则:接口优先于反射机制,怎么理解这句话?
因为对于特定的复杂的系统编程任务,反射很有必要,如果编写的程序必须要与编译时未知的类一起工作,就可以用反射仅仅来实例化对象,但不应该通过反射来访问对象,应该通过被实例化对象的接口或者父类来访问对象的方法,这就是接口优先于反射机制的含义 .....

反射的缺点:
1,丧失了编译时类型检查的好处
2,执行反射访问所需代码笨拙冗长
3,性能损失