"可见性"的含义Java文学中含糊不清?

时间:2018-06-03 04:59:13

标签: java terminology

首先,一点背景。根据我的理解,有两个相关但截然不同的概念:
1. 辅助功能。这与使用publicprotectedprivate来控制对班级成员和班级本身的访问权限有关。
2. 命名。鉴于实体首先是可访问的,这涉及是否需要使用简单名称或完全限定名称(如myOrg.myPackage.myClass),并且与import语句相关联,这允许使用简单名称。

"可见性的一个定义"在Java中担心#1:
https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

然而,在JLS,"范围"和"可见性"似乎关注#2: https://docs.oracle.com/javase/specs/jls/se8/html/jls-6.html#jls-6.4.1

  

范围是声明的程序文本的一部分   实体可以用简单的名称来引用。

     

如果声明d在程序中的点p处可见,则说明   d的范围包括p,d不受任何其他声明的影响   在p。

根据此定义,即使myMemberpublic中的myClass被声明为public,也不会被视为可见,因为它无法被引用通过简单的名称(必须使用myOrg.myPackage.myClass.myMember)。

我是否正确地解释了这两个术语"可见性"携带不同的语义,用于模糊?我无法协调它们。

1 个答案:

答案 0 :(得分:3)

Oracle Java教程似乎是"实时文档"没有明显的版本编号。一般来说,它们应该被理解为描述"当前" Java版本;即最新规范描述的版本。因此,您应该将教程与Java语言规范(JLS)的Java 10版本进行比较。

正如@Radiodef所说,您已链接到Java 8 JLS。在Java 9及更高版本中,术语"可见性"不再习惯谈论范围和隐藏声明。术语"可见性"现在在两种情况下使用:

  • 在讨论从不同的Java 9+模块可以看到哪些包和类时,
  • 在谈论Java内存模型上下文中来自不同线程的变量的可见性时。

使用"可见性"您在Java 8 JLS中找到的不再适用。 (是的,术语有所改变。)

要实现的第二件事是Java教程主要由初学者和中级Java程序员编写为可理解。因此,他们有时会使用不是标准化的术语,有时他们会说技术上不正确或过度简化的事情。

差异可能是故意的,或者它们可能是一种疏忽,或者可能只是那种"某人"在更新教程方面落后了。我的理解是不同的人/小组负责规范和教程。当然,编写/编辑两组文档需要不同的技能,因为(部分)文档针对不同的受众。

底线:

  1. 如果您需要/需要技术上正确的Java术语,请参阅JLS的最新版本中的定义。

  2. 带上一些盐的教程。它们不是决定性的。