A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 回首、后_街 于 2013-4-22 17:56 编辑

对于反射不是很了解,希望大家能详细介绍一下,谢谢了!

3 个回复

正序浏览
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。


反这样说吧,反射就是把Java类中的各种成分映射成相应的java类”。 例如,一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,修饰符,包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应的类来表示的,它们是Field、Method、Contructor、Package等等。
用这段代码把盖章的过程对比一遍:
String obj = (String)Class.forName("java.lang.String").newInstance();
这是制造另一个章:Class.forName("java.lang.Integer")
---------------------
讲Constructor:
Constructor constructors[] = Class.forName("java.lang.String").getConstructors();
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);
/*故意用string,根据错误感受到确实是那个构造方法*/
String str = (String)constructor.newInstance(/*"abc"*/new StringBuffer("abc"));
System.out.println(str);
class.newInstance()内部其实就是在用默认的构造方法
-------------------------
讲Field
public class ReflectPoint {
private int x;
public int y;

public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
ReflectPoint point = new ReflectPoint(1,7);
Field y = Class.forName("cn.itcast.corejava.ReflectPoint").getField("y");
System.out.println(y.get(point));
Field x = Class.forName("cn.itcast.corejava.ReflectPoint").getDeclaredField("x");
x.setAccessible(true);
System.out.println(x.get(point));

利用反射机制进行逆向代码,反编译器就是他了。java反射机制主要在自定义标签和框架spring,Hibernate,struts1/struts2中使用  这样你就可以直接配置文件信息了


希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1 回答很详细!!!

查看全部评分

回复 使用道具 举报
先在论坛搜一下,针对视频某个知识点执行提问
另外呢,建议先把反射多看几遍,才能慢慢理解,是挺难的这块
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马