黑马程序员技术交流社区

标题: 反射就是把java类中的各种成分映射成相应的java类 [打印本页]

作者: ♂诸侯♂    时间: 2012-2-28 17:29
标题: 反射就是把java类中的各种成分映射成相应的java类
这句话,谁能给从字面意思和用个例子给解释一些。谢谢


该贴已经同步到 ♂诸侯♂的微博
作者: 王--明    时间: 2012-2-28 18:12
可以这么理解,不过还是说下,
一个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));

作者: ♂诸侯♂    时间: 2012-3-5 03:42
相当理解了谢谢你。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2