首页 > 解决方案 > 为什么静态方法可以访问私有数据?

问题描述

我来自 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并且我必须使用访问器方法。

标签: java

解决方案


没有办法保护“一个类不受自身的影响”。私有意味着当前类(并且只有当前类)可以访问该字段。

如果您有一个任何方法都无法访问的私有字段,则您永远无法读取或更新其值,从而使其变得不必要。通过将字段声明为私有,您可以禁止当前班级之外的任何人访问该字段。

在此处阅读有关可见性的信息:https ://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html


推荐阅读