java - 为什么静态方法可以访问私有数据?
问题描述
我来自 C++ 背景,所以我习惯了main
无法访问实例的私有数据成员的函数。
但是,Java 的情况不同,因为main
它是公共类的一部分,因此可以访问私有数据。
为什么即使静态方法不属于调用实例,也可以访问私有数据?有什么办法可以避免这种情况发生吗?
这里有一个小片段来解释我的意思:
public class Main
{
private int x = 5;
public static void main(String[] args) {
Main ob = new Main();
System.out.println(ob.x);
}
}
我希望x
无法访问,main
并且我必须使用访问器方法。
解决方案
没有办法保护“一个类不受自身的影响”。私有意味着当前类(并且只有当前类)可以访问该字段。
如果您有一个任何方法都无法访问的私有字段,则您永远无法读取或更新其值,从而使其变得不必要。通过将字段声明为私有,您可以禁止当前班级之外的任何人访问该字段。
在此处阅读有关可见性的信息:https ://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
推荐阅读
- azure - 请求缩略图时来自 https://southcentralus1-mediap.svc.ms/ 的 503.2 错误过多
- python - 使用 tf.distribute.MirroredStrategy() 时无法加载 tensorflow keras 检查点
- c++ - 无法插入到集合中
- python - 为什么逐行遍历文件会打印太多结果?
- java - Hazelcast 上线程阻塞的未知错误
- byte-buddy - 当我在某些情况下使用 ByteBuddy 子类化一个类时,我得到 IllegalAccessErrors。为什么?
- angular - CORS 策略已阻止从源“http://localhost:4200”访问“http://localhost:8080”处的 XMLHttpRequest
- c++ - 如何减少 OpenGL UBO 对齐填充?
- windows - 我如何在两个路径中使用带有空格的 XCOPY,即使带有引号?
- r - R在绘图上编程以标记轴