2017-04-26 112 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虛擬機 實現方面的特殊 行爲的語義。