This Specification defines version 12 of the Java Platform, Standard Edition (“Java SE 12”). The Reference Implementation of this Specification is the Java Development Kit, version 12 (“JDK 12”).
|4||Component JSR Specifications|
|9||APIs proposed for removal|
|A1||Complete API Specification|
|A2||API Specification differences|
|A3||Java Language & Virtual Machine Specifications|
This release continues the evolution of the Platform to ensure the broadest possible success of the core Java technology. It contains language preview features to provoke developer feedback based on real world use.
This document directly specifies API features, enhancements, clarifications, and bug fixes. It also specifies features by reference to other Specifications which are revised in Maintenance Releases of existing JSRs. The specifications of these changes are contained in two accompanying documents: Annex 1 is the complete Java SE 12 API Specification and Annex 2 is an annotated API specification showing the exact differences relative to the Final Release of Java SE 11. Informative background for these changes may be found in the list of approved Change Specification Requests for this release. Some of these Requests pertain to support for external standards (eras in the Japanese imperial calendar, currency symbols in Unicode, and industry-wide cryptographic algorithms) that is also found in Maintenance Release 1 of Java SE 11.
This Specification includes the Java SE 12 Editions of The Java Language Specification and The Java Virtual Machine Specification in Annex 3. The Java SE 12 Editions contain all corrections and clarifications made since the Java SE 11 Editions, as well as additions for new features.
Changes to the Java SE Platform Specification are categorized as either features or enhancements. A feature is, roughly speaking, a change of which at least one of the following statements is true:
Any addition that is not a feature is considered an enhancement.
There is, obviously, room for judgment when interpreting this definition. In order to maximize the visibility of Platform revisions we generally tend to consider borderline items to be features rather than enhancements.
Some Component JSR Specifications previously incorporated into the Platform are still available separately or have significant Specifications themselves. Changes to their Specifications are therefore made in separate Maintenance Release, which is incorporated here by reference:
Each Component JSR Specification, or revision thereto, may be related to one or more features in the detailed list below.
Work on features in the Java SE 12 Reference Implementation is organized in terms of JDK Enhancement Proposals (JEPs). Each feature description gives a link to the corresponding JEP document as a convenience, but that document is not a normative part of this Specification. Some features are included in the Java SE 12 Reference Implementation on a preview basis, to gain exposure before achieving permanent status in a later release of the Java SE Platform.
Introduce an API to model nominal descriptions of key class-file and run-time artifacts, in particular constants that are loadable from the constant pool.
switch statement so that it can be used as either a statement or an expression, and that both forms can use either a "traditional" or "simplified" scoping and control flow behavior. These changes will simplify everyday coding, and also prepare the way for the use of pattern matching (JEP 305) in
switch. This will be a preview language feature.
Preview features A preview language or VM feature is a new feature of the Java SE Platform that is fully specified, fully implemented, and yet impermanent. Preview features must possess the following properties:
Implementations of this Specification must:
Additional details about preview features, including a description of a feature’s life cycle and the relationship of preview features to Java SE APIs are available in JEP 12 Preview Language and VM Features.
A module is a named set of packages designed for reuse. A specification governed by the JCP defines standard packages, and may group them into one or more standard modules.
This Specification groups the standard packages of the Java SE Platform into 21 standard modules, which we refer to as the Java SE modules. The name of a Java SE module always starts with the string "java.". The complete list of such modules is:
Compared to Java SE 11, this Specification does not add or remove any modules.
The module graph The Java SE modules depend upon each other as stated in their specifications, which are part of the overall API Specification. The corresponding complete Java SE module graph has too many edges to be displayed easily in visual form; here is the transitive reduction of the directed acyclic graph, in which redundant edges are omitted (click to enlarge):
Here is how to read this visualization of the module graph:
If one module depends upon another, and it grants implied readability to that module via a requires transitive directive, then there is an edge from the first module to the second.
At the very bottom is the java.base module, which contains essential classes such as java.lang.Object and java.lang.String. The base module depends upon no module, and every other module depends upon the base module.
At the top is the java.se module, which gathers together all of the modules that comprise the Java SE Platform. This is an example of an aggregator module, which logically gathers the content of other modules by granting implied readability to them, but adds no content of its own. A run-time system configured to contain the java.se module will contain all of the packages of the Java SE Platform.
A module is a Java SE module — that is, considered part of the Java SE Platform Specification — if and only if it is a standard module reachable from the java.se module.
Following the conventions established by the Enhanced Deprecation feature,
various modules and APIs were annotated with
forRemoval=true in the “APIs
Proposed for Removal” section of the Platform Specifications for
Java SE 9,
Java SE 10, and
Java SE 11.
The following individual APIs are removed from this Specification. The number in parentheses indicates the Java SE Platform Specification which first proposed their removal.
The following APIs were proposed for removal by the Platform Specifications for Java SE 9, Java SE 10, and Java SE 11, and continue to be eligible for removal in a future release. They are not removed from this Specification.
Compared to Java SE 11, this Specification does not add or propose to remove any further APIs.