当前位置: 首页 > 面试题库 >

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

杜嘉慕
2023-03-14
问题内容

在大学里学习时,我不得不做一些难看的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);
  }
}

为什么这段代码可以编译并正确运行?我怎么可能访问私有字段?由于主类位于同一类中,因此行为异常?


问题答案:

由于静态方法main是类的成员,Person因此可以访问中的任何私有字段或方法Person

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

如果您要担心任何事情,请担心您可以使用反射来访问 任何 类中的私有字段,但这对于许多有用的事情来说也是必需的。



 类似资料:
  • 问题内容: 我正在研究TypeScript中私有成员的实现,但我感到有些困惑。Intellisense不允许访问私有成员,但是在纯JavaScript中,仅此而已。这使我认为TS无法正确实现私有成员。有什么想法吗? 问题答案: 就像类型检查一样,成员的隐私仅在编译器中强制执行。 私有属性被实现为常规属性,并且不允许类外的代码对其进行访问。 为了使某些东西真正成为类的私有对象,它不能成为该类的成员,

  • 问题内容: 考虑这个例子: 允许您通过反射来访问类的私有字段似乎是不合逻辑的。为什么有这样的功能?允许这样的访问不是“危险”吗? 问题答案: 专用旨在防止意外滥用,而不是作为一种安全机制。如果您选择绕过它,那么您可以自行承担风险,并假设您知道自己在做什么。

  • 问题内容: 最近,我观察到在Java中访问priavte字段的意外行为。考虑以下示例,该示例说明了该行为: 为什么我可以访问类的其他对象的私有字段的内法(第二种情况)? 问题答案: 私有字段保护一个类,而不是实例。主要目的是允许一个类独立于其API实现。在它们之间隔离实例,或从相同类的静态代码中保护实例的代码都不会带来任何好处。

  • 问题内容: 众所周知,私有字段不会在类之间继承。令我着迷的是它如何用于内部静态类。考虑以下代码: 您能否解释一下如何访问其他内部类的私有字段?如果合法,为什么只能通过“ super.XXX”构造实现? 问题答案: 内部类是Java的较晚入门。添加它们时,它们仅作为编译器扩展添加,对JVM不变。 语言规范指出,内部类被允许访问在其内声明的类的私有成员。包括其他内部类。 为了使其工作,编译器会生成桥接

  • 我正在尝试获取对象的私有字段的名称。当我对包的公共字段使用相同的切点时,它正好工作。我的方面设置为特权。我想要更新类对象的字段。切入点: 建议: 我在我的切入点异常中得到这一行的异常:

  • 问题内容: 如果我用Java创建一个类,就会一直被告知惯例是将类的所有字段都设为私有。如果需要访问或更改它们,可以创建访问器和更改器方法。我确实了解私有变量的重要性,因为它们有助于降低复杂性并允许封装。 我不明白的是,如果我创建一个公共的accesor和mutator方法,那么变量不是公共的吗?在任何人都可以访问私有变量的情况下,为什么仍然习惯使用私有变量? 我还应该指出,我了解这些方法的重要性,