黑马程序员技术交流社区

标题: 帮忙看下下面这段代码。 [打印本页]

作者: 疯子的昨天    时间: 2014-1-22 17:28
标题: 帮忙看下下面这段代码。
正在看张孝祥老师基础加强那一块的反射。感觉很难。
看下下面这段代码。。解释一下。是关于反射的。
RefiectPoint pt1 =new RefiectPoint(3,5);
Field  fieidy = pt1.getclass().getField(y);
就这两句话,fieidy的值为什么不是5?
上面那句话是给pt1赋值x=3,y=5.那么下面应该是在求y的字节码数值。是5啊。。但是为什么不是。。麻烦懂反射的解释一下。
谢谢。



作者: 放课后小朋友    时间: 2014-1-22 17:57
本帖最后由 放课后小朋友 于 2014-1-22 17:58 编辑

fieidy根本是Field类型而不是int类型,所以呢,不会返回具体数值的。
上面有两种情况:
1、如果你引用的构造方法RefiectPoint中的参数是private修饰的,那么下面的field需要调用方法.setAccessible(true)将访问限制设置成可访问。
2、如果想要得到y的数值,还需要一句话:field.get(...)

为了便于观看,给你现成代码:
RefiectPoint pt1 =new RefiectPoint(3,5);
Field f=pt1.getClass().getDeclaredField("y");
f.setAccessible(true);
System.out.println(f.get(pt1));//俗称:暴力反射

------纯手打,勿拷贝,更勿粘贴,可以照写{:soso_e144:}-------
作者: ↑↓ME→←    时间: 2014-1-22 21:53
那是因为pt1.getclass().getField(y)返回的是属性y的作用域,不是针对某个对象,而是针对RefiectPoint这个类的,要不要怎么保证类,对象的字节码相同,求得y的作用域后再针对某个对象得到该对象属性值!




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