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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 疯子的昨天 中级黑马   /  2014-1-22 17:28  /  831 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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


评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 放课后小朋友 于 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:}-------

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

回复 使用道具 举报
那是因为pt1.getclass().getField(y)返回的是属性y的作用域,不是针对某个对象,而是针对RefiectPoint这个类的,要不要怎么保证类,对象的字节码相同,求得y的作用域后再针对某个对象得到该对象属性值!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马