2017-04-26 116 views
4

只有一个官方Java Language Specification,所有的Java实现都必须遵守它。JDK文档是语言规范的一部分吗?

API文档如何:所有的Java实现都需要遵守this version,或者只要与JLS兼容,实现是否可以用不同的方式定义一些方法和类的行为?

让我们举一个具体的例子:Java实现是否可以包含一个HashMap,它不接受null元素?

+0

是的,所有Java SE API也是规范的一部分。所有实现都必须遵守API的所有Javadocs。 – ZhekaKozlov

+0

@ZhekaKozlov你有来源还是参考? – assylias

+0

JLS定义了Java程序应该如何在虚拟机上运行。 HashMap不是虚拟机的一部分(与Object和Thread相反),所以JLS甚至没有触及它。 – Zefick

回答

3

我相信,那是的。

经过仔细检查,我认为它是而不是

作为JLS 8个状态中p.1.4

1.4。与预定义的类和接口的关系

如上所述,本规范通常涉及Java平台API的类。特别是,有些类与Java编程语言有特殊的关系。示例包括诸如Object,Class,ClassLoader,String,Thread和类java.lang.reflect中的类和接口等类。 本规范约束了这些类和接口的行为,但没有为它们提供完整的规范。 读者可以参考Java SE平台API文档。

从一方面他们的状态,即JLS文件不提供完整的规范和读者发送给Java SE平台API文档。另一方面,当提及Java SE的一些API(复数形式)时,JLS中存在各种不同的地方。此外,似乎JLS不包含链接到特定的Java SE API规范:

3.1. Unicode

Java SE平台的某些API,主要是Character类,使用32位整数将代码点表示为单个实体。 Java SE平台提供了在32位表示之间转换16位和 的方法。

3.10.4. Character Literals

字符文字只能代表UTF-16代码单元(§3.1),即, 它们局限于值从\ u0000的到\ uffff。补充 字符必须表示为 字符序列中的替代对,或者作为整数,具体取决于它们使用的API 。

9.6.4. Predefined Annotation Types

几个注释类型预定义在Java SE 平台的库。其中一些预定义的注释类型具有特殊的语义。这些语义在本节中指定。本部分 未提供此处包含的预定义 注释的完整规范; 这是API规范的合适 的作用。这里仅指定那些需要在Java编译器或Java虚拟机 实现方面的特殊 行为的语义。