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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© alive 中级黑马   /  2014-8-1 02:59  /  1356 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 alive 于 2014-8-1 21:09 编辑

为什么只有当Point类中的String类型成员变量为public时,a才能够被替换成b??

1.png (6.49 KB, 下载次数: 15)

1.png

2.png (8.85 KB, 下载次数: 1)

2.png

8 个回复

倒序浏览
如果私有了那外部的类怎么能看到另外一个类里面的私有成员变量呢,如果私有还有一个办法就是暴力反射,用getDeclaeredField,和setAccessible来得到
回复 使用道具 举报
阿磊 发表于 2014-8-1 08:37
如果私有了那外部的类怎么能看到另外一个类里面的私有成员变量呢,如果私有还有一个办法就是暴力反射,用ge ...

使用默认的修饰,也不会替换是为什么?
回复 使用道具 举报
M单色调 发表于 2014-8-1 08:46
使用默认的修饰,也不会替换是为什么?

默认权限是什么呢?其实反射也懂皮毛,我觉得可能是因为在我们写这个反射方法的时候我们都不知道将来会是什么样的对象,有什么样的成员变量,所以应该默认能操作的就是publiic权限的吧。。
回复 使用道具 举报
getFields() 返回的都是public的东西
回复 使用道具 举报
getXXX()只能拿到公共的,也就是用public修饰的,
getDeclaredXXX()就不论是public的还是其他的,都能拿到。
回复 使用道具 举报
江苏孙浩 发表于 2014-8-1 09:04
getFields() 返回的都是public的东西

应该就是了 拿到的都是public 默认权限拿不到 所以替换不了
回复 使用道具 举报
getFields()只能获取到访问权限为可见的成员变量,要获得不可见的成员变量要使用getDeclareFields()来获得类中声明的所有成员变量,又因为不可见,调用setAccessable(boolean flag)方法,传入true参数,进行暴力反射,这样就可以拿到不可见的成员变量并进行操作了。
回复 使用道具 举报
将getFields()方法改成getDeclaredFields()就不会错了,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马