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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 施俊 中级黑马   /  2012-4-27 09:14  /  2184 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

通过暴力反射getAccessible(true)方法和getDeclareFiled()方法可以获取到对象身上的私有字段,如果这样可以获取到私有字段,那么在对象身上定义的私有还有什么意义呢?这样会不会造成程序不够安全?如果用暴力反射都能够获取到私有字段,那么定义私有不久失去了意义?

2 个回复

倒序浏览
getDedaredField Method 获得被阻止的文件访问权。
setAccessible(true) method是设置字段是友好的,
这样就可以将私有字段打印在控制台了。
将属性设置为私有的是为了防止一般用户去访问这些字段,
但是作为开发者我们可以通过反射去访问。
将内部的属性和方法进行封装的一个方法就是私有,
然后向用户提供接口,用户通过提供的接口进行操作。

这是我认为回答的比较好的一份答案,因为我以前也问过类似问题。

回复 使用道具 举报
暴力反射的目的我觉得是用来进行代码调试阶段使用的,在软件开发中不应该使用暴力反射获取类的私有属性,应该通过类提供的公有方法来进行获取私有属性。应为使用暴力反射会成为一个安全隐患,为此,我们可以启java.security.manager来判断程序是否具有调用setAccessible()的权限。默认情况下,内核API和扩展目录的代码具有该权限,而类路径或通过URLClassLoader加载的应用程序不拥有此权限 。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马