Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反射能改变物体的状态吗?_Java_Oop_Reflection - Fatal编程技术网

Java 反射能改变物体的状态吗?

Java 反射能改变物体的状态吗?,java,oop,reflection,Java,Oop,Reflection,我阅读了以下关于Java中反射的文章: 在这本书中,作者描述了如何通过反射来更改对象字段的值。他解释了如何做到这一点,即使该领域有私人访问 当我回来的时候,我读了Joshua Block的书:“高效Java”。在这里,他说,为了尽可能防止不安全地访问对象的字段、方法等,我们应该给字段和方法提供最严格的修改器(即,尽可能私有,如果它是公开api的一部分,则为公共或受保护) 我的问题如下: 如果可以通过反射访问敏感信息,为什么还要费心设计类来不公开这些信息呢 (事实上,我是在询问我所缺少的信息来理

我阅读了以下关于Java中反射的文章:

在这本书中,作者描述了如何通过反射来更改对象字段的值。他解释了如何做到这一点,即使该领域有私人访问

当我回来的时候,我读了Joshua Block的书:“高效Java”。在这里,他说,为了尽可能防止不安全地访问对象的字段、方法等,我们应该给字段和方法提供最严格的修改器(即,尽可能私有,如果它是公开api的一部分,则为公共或受保护)

我的问题如下:

如果可以通过反射访问敏感信息,为什么还要费心设计类来不公开这些信息呢


(事实上,我是在询问我所缺少的信息来理解这个主题)

首先,“private”并不是指安全功能。看见Java有一个安全系统,如果你真的想要这种保护,你应该使用它

OOP中的“private”是意图的信号,是类合同的一部分。通过将一个字段标记为“private”,说明如果有人潜入并使用反射或其他内容修改内容,那么您在其他类中所做的所有保证都将不再有效


这有点像你的电视或其他设备保修书上的细则——如果你开始在线路内部(可以说是私人领域)挖掘,然后,保修无效,三星或其他公司将不承担维修您在保修期间可能发生的任何问题的费用。

将某个字段标记为私有或受保护字段将大大有助于让您的库或API的用户知道他们应该如何使用(或不使用)该字段。这不仅仅是一个安全问题,私密性就像在电源插座上盖上绝缘盖:它向人们表明你希望他们如何使用它;但这并不能阻止有人拧开前面的螺丝,接触带电的电线。还可以使用安全管理器来防止反射修改。看见