为什么不禁止访问私有字段?

对于我在大学里的学习,我不得不做一些丑陋的java基础知识,比如没有封装的工作,同一类的主要方法等等。(我不想在java风格指南上开一个讨论,我只是想澄清一下,我不会在大学之外写这样的东西)

我偶然发现了一种我无法向自己解释的行为:

public class Person { // fields private int age; public static void main(String[] args) { Person foo1 = new Person(); foo1.age = 40; System.out.println(foo1.age); } } 

为什么这段代码编译运行没有错误? 我怎么可能访问私人领域? 由于主要方法在同一个类中而导致奇怪的行为?

因为静态方法mainPerson类的成员,因此可以访问Person任何私有字段或方法。

你在担心什么? 有人会写一个类,然后能够从他们自己的类访问这些方法?

如果您要担心任何事情,请担心您可以使用reflection访问任何类中的私有字段,但即使这对于许多有用的事情都是必要的。

是的 – 在Java中,private是类私有而非私有实例。

许多其他语言使用私有实例,例如Ruby和Smalltalk。

由于您的main方法位于同一个类中,并且实例变量具有私有访问权限,因此它仅适用于同一类的方法。 没有访问修饰符可以限制同一个类的方法访问其成员变量。 这就是这里发生的事情。 如果你的主要方法在某个其他类中虽然在同一个包中,但它不会编译。

您可以从类中访问私有字段。 这就是让他们按class级定义的重点。

您可以在Person类中编写任何其他静态方法,并从该方法访问私有变量。 Main只是一个名字。 这就是人生。

因为你的方法main(String[] args)是在Person类中定义的。 如果方法是在Person类之外定义的,那么你就无法做到这一点。