黑马程序员技术交流社区

标题: 对象的私有变量通过反射取出问题。 [打印本页]

作者: 施俊    时间: 2012-4-27 09:14
标题: 对象的私有变量通过反射取出问题。
通过暴力反射getAccessible(true)方法和getDeclareFiled()方法可以获取到对象身上的私有字段,如果这样可以获取到私有字段,那么在对象身上定义的私有还有什么意义呢?这样会不会造成程序不够安全?如果用暴力反射都能够获取到私有字段,那么定义私有不久失去了意义?
作者: 周海诚    时间: 2012-4-28 14:27
getDedaredField Method 获得被阻止的文件访问权。
setAccessible(true) method是设置字段是友好的,
这样就可以将私有字段打印在控制台了。
将属性设置为私有的是为了防止一般用户去访问这些字段,
但是作为开发者我们可以通过反射去访问。
将内部的属性和方法进行封装的一个方法就是私有,
然后向用户提供接口,用户通过提供的接口进行操作。

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


作者: 奥特曼爱小怪兽    时间: 2012-4-28 14:45
暴力反射的目的我觉得是用来进行代码调试阶段使用的,在软件开发中不应该使用暴力反射获取类的私有属性,应该通过类提供的公有方法来进行获取私有属性。应为使用暴力反射会成为一个安全隐患,为此,我们可以启java.security.manager来判断程序是否具有调用setAccessible()的权限。默认情况下,内核API和扩展目录的代码具有该权限,而类路径或通过URLClassLoader加载的应用程序不拥有此权限 。




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