Zusammenfassung der neuen Funktionen von Java 13

Java 13 wurde am 17.09.2019 veröffentlicht. Java SE 13 Platform JSR 388

herunterladen

Ich konnte es von der OpenJDK-Site herunterladen. https://jdk.java.net/13/

Derzeit kann es von der Archivseite heruntergeladen werden. https://jdk.java.net/archive/

Es ist kein LTS, daher denke ich nicht, dass es jetzt für andere Zwecke als die Überprüfung heruntergeladen werden muss. SDKMAN! wird für die Installation unter Mac und Linux empfohlen

Neben dem Oracle Open JDK gibt es die folgenden Distributionen, die kostenlos kommerziell verwendet werden können.

Da es sich nicht um LTS handelt, scheint es nicht auf Amazon Corretto veröffentlicht zu sein.

Das Oracle JDK ist für Entwicklungszwecke verfügbar, Sie müssen jedoch ein Java SE-Abonnement für die kommerzielle Nutzung erwerben.

JEP Die Änderungen sind als JEP organisiert. https://openjdk.java.net/projects/jdk/13/

Diesmal sind ca. 5 JEPs enthalten. JEP 350: Dynamic CDS Archives JEP 351: ZGC: Uncommit Unused Memory (Experimental) JEP 353: Reimplement the Legacy Socket API JEP 354: Switch Expressions (Second Preview) JEP 355: Text Blocks (Preview)

JEP 355: Text Blocks (Preview) Als Vorschau wurde ein mehrzeiliges Zeichenfolgenliteral eingeführt.

String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;

Speicherplatz und mehr wurden hinzugefügt, um es in Java 15 zum Standard zu machen. Detaillierte Spezifikationen finden Sie in der Java 14-Beschreibung. Java 14 New Features Summary-Qiita

JEP 354: Switch Expressions (Second Preview) Machen Sie die Switch-Anweisung zu einem Ausdruck.

int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
};

Im Vergleich zu Java 12 hat sich die Syntax für die Rückgabe von Werten in Schalterausdrücken von "break" in "ield "geändert. Standardisiert in Java 14. Detaillierte Spezifikationen finden Sie in der Java 14-Beschreibung. Java 14 New Features Summary-Qiita

JEP 350: Dynamic CDS Archives

Erstellen Sie zur Laufzeit ein CDS-Archiv, indem Sie -XX: ArchiveClassesAtExit hinzufügen. Ich denke, dies ist eine gute Referenz für die Verwendung. Java 13 Dynamic CDS startet schneller als erwartet - Kishida Hatena

In dem Gefühl, dass ich es versucht habe, war es schneller, ein CDS-Archiv normal als zur Laufzeit zu erstellen. Self-Dumping von Java 10 ist schneller als Dynamic CDS-Kishida Hatena

JEP 351: ZGC: Uncommit Unused Memory (Experimental)

Nicht verwendeter Speicher in ZGC wird freigegeben.

JEP 353: Reimplement the Legacy Socket API

Die TCP-Socket-API wurde neu implementiert, um die asynchrone Verarbeitung in Project Loom zu unterstützen.

API

Einige API-Änderungen haben sich ebenfalls geändert.

String

TextBlocks-bezogene APIs wurden hinzugefügt. Ab Java 13 kann es jedoch jederzeit nur durch Angabe von "@ Deprecated" verwendet werden. In Java 14 kann es jedoch nur verwendet werden, wenn "--enable-Preview" hinzugefügt wird.

formatted Stellen Sie String.format als Instanzmethode zur Verfügung.

Zum Beispiel

callQuery(String.format("select * from table where id=%d", id));

Was wurde geschrieben

callQuery("select * from table where id=%d".formatted(id));

Es ist bequem zu schreiben wie. https://bugs.openjdk.java.net/browse/JDK-8203444

translateEscapes Behandle \ n usw. als Escapezeichen. Wenn man sich den Code ansieht, ist dies verwirrend mit dem Escapezeichen, aber das \ n in der Zeichenfolge wird in einen Zeilenumbruch konvertiert.


jshell> var s = "test\\ntest\\n"
s ==> "test\\ntest\\n"

jshell> System.out.println(s)
test\ntest\n

jshell> s.translateEscapes()
$18 ==> "test\ntest\n"

jshell> System.out.println(s.translateEscapes())
test
test

https://bugs.openjdk.java.net/browse/JDK-8223780

stripIndent

Entfernen Sie den Einzug.

https://bugs.openjdk.java.net/browse/JDK-8223775

Get (null) für Map mit 1 Element in Map.of ist schleimig

Map.of wurde in JDK9 hinzugefügt. In JDK9 und JDK10 wird eine Instanz von "Map0" zurückgegeben, wenn die Anzahl der Elemente 0 ist, "Map1", wenn die Anzahl der Elemente 1 ist, und "MapN", wenn die Anzahl der Elemente 2 oder mehr beträgt, und "Map.of ()". kehrte zurück null`.

C:\Users\naoki>java\jdk\jdk-10.0.1\bin\jshell
|Willkommen bei JShell--Version 10.0.1
|Geben Sie für eine Übersicht Folgendes ein: /help intro

jshell> Map.of().get(null)
$1 ==> null

jshell> Map.of(1,2).get(null)
$2 ==> null

jshell> Map.of(1,2,3,4).get(null)
|  java.lang.NullPointerException thrown
|        at ImmutableCollections$MapN.probe (ImmutableCollections.java:779)
|        at ImmutableCollections$MapN.get (ImmutableCollections.java:721)
|        at (#3:1)

Selbst wenn die Anzahl der Elemente in JDK11 0 ist, wird "MapN" verwendet und "Map.of (). Get (null)" ist schleimig.

C:\Users\naoki>java\jdk\jdk-11.0.1\bin\jshell
|Willkommen bei JShell--Version 11.0.1
|Geben Sie für eine Übersicht Folgendes ein: /help intro

jshell> Map.of().get(null)
|Ausnahme Java.lang.NullPointerException
|        at Objects.requireNonNull (Objects.java:221)
|        at ImmutableCollections$MapN.get (ImmutableCollections.java:843)
|        at (#1:1)

jshell> Map.of(1,2).get(null)
$2 ==> null

jshell> Map.of(1,2,3,4).get(null)
|Ausnahme Java.lang.NullPointerException
|        at ImmutableCollections$MapN.probe (ImmutableCollections.java:926)
|        at ImmutableCollections$MapN.get (ImmutableCollections.java:846)
|        at (#3:1)

Im Fall von "Map.of (1,2) .get (null)" wurde "null" von JDK9 an JDK12 zurückgegeben. Ab JDK13 ist "Map.of (1,2) .get (null)" ebenfalls schleimig. Frühere Versionen wurden auch in JDK 12.0.2 und JDK 11.0.4 behoben.

http://mail.openjdk.java.net/pipermail/core-libs-dev/2019-April/059533.html

Es ist auch interessant, den Equals-Aufruf anstelle von requireNonNull für die Nullprüfung zu verwenden.

http://cr.openjdk.java.net/~smarks/reviews/8221924/webrev.0/src/java.base/share/classes/java/util/ImmutableCollections.java.patch

Standardkonstruktor für Number

http://mail.openjdk.java.net/pipermail/core-libs-dev/2019-May/060258.html

Der Klasse "Number" wurde ein Standardkonstruktor hinzugefügt. Die Implementierung sieht jedoch so aus.

public Number() {super();}

Dies ist nicht erforderlich, da es implizit definiert ist, auch wenn es nicht definiert ist. Irgendwie scheint es hinzugefügt worden zu sein, um Flusen zu täuschen

Hinzufügung eines Dekrets zur japanischen Ära

Die neue Originalausgabe "Reiwa" hat am 1. Mai 2019 begonnen. Java 8-Updates, Java 11 und Java 12 unterstützten ebenfalls die Abstimmung in Format und Perspektive, wurden jedoch im japanischen Zeitalter nicht offiziell definiert. Ab Java 13 können Sie JapaneseEra.REIWA verwenden.

In Java 11 wurde das ursprüngliche Problem nicht entschieden, daher wurde es als New Era angezeigt.

jshell> java.time.chrono.JapaneseDate.now()
$1 ==> Japanese NewEra 2-07-21

Da die ursprüngliche Ausgabe in 11.0.3 entschieden wurde, wurde sie als REIWA angezeigt.

jshell> java.time.chrono.JapaneseDate.of(2020,5,1)
$1 ==> Japanese Reiwa 2-05-01

Zu diesem Zweck wurden auch "JapaneseEra.NEWERA" und "JapaneseEra.REIWA" definiert. Da es sich jedoch um ein privates Paket handelte und nicht aus dem Code verwendet werden konnte, wurde es ab Java 13 öffentlich und kann von jedem verwendet werden wurde.

Werkzeug

Es gibt einige Änderungen in rmic.

Lassen Sie rmic mit --preview-function nichts passieren

http://mail.openjdk.java.net/pipermail/core-libs-dev/2019-April/059683.html

rmic bis veraltet. Und dann löschen

[JDK-8217412] deprecate rmic for removal - Java Bug System

Es verschwindet in Java 15.

Recommended Posts

Zusammenfassung der neuen Funktionen von Java 12
Zusammenfassung der neuen Funktionen von Java 13
Zusammenfassung der neuen Funktionen von Java 10
Zusammenfassung der neuen Funktionen von Java 14
Java EE 8 (Jakarta EE 8) Zusammenfassung der neuen Funktionen
Zusammenfassung des Java-Wissens
Java Generics Zusammenfassung
Java-bezogene Zusammenfassung
Java1.8 neue Funktionen
Zusammenfassung des Java 8-Dokuments
Zusammenfassung des Java 11-Dokuments
[Zusammenfassung] Zum Beispiel die Vorbereitung der Java-Umgebung
effektive Java 3. Zusammenfassung
Java statisch [Persönliche Zusammenfassung]
Java 8 Lambda-Ausdruck Feature
Thread sichere Zusammenfassung ~ Java ~
Zusammenfassung der primitiven Java-Spezialisierung
Zusammenfassung des Java-Entwicklungslinks
Persönliche Zusammenfassung über Java
Was ist neu in Java 8?
JSF2.3 neue Funktionsübersicht
Zusammenfassung der regulären Ausdrücke von Java
Was ist neu in Java 9,10,11
Zusammenfassung der Java-Unterstützung 2018
Zusammenfassung des Java-Entwurfsmusters
Java-Zusammenfassung für reservierte Wörter
Grobe Zusammenfassung des Java8-Streams
Zusammenfassung der Revisionen (neue Yuan-Probleme) nach Java-Version
Was ist Java Assertion? Zusammenfassung.
[Java] Neue Thread-Generierungsmethode (2)
[Java11] Stream-Zusammenfassung - Vorteile von Stream -
Progate Java (Anfänger) Review & Zusammenfassung
Neue Funktionen von Java7 bis Java8
[Java] Zusammenfassung der regulären Ausdrücke
[Java] Zusammenfassung der Operatoren (Operator)
Java8-Stream, Zusammenfassung des Lambda-Ausdrucks
Objektorientierte Zusammenfassung von Anfängern (Java)
Zusammenfassung der Grundlagen der Java-Sprache
Java-Tipps - Zusammenfassung der Federausführung
Zusammenfassung der Java Math Klasse
PrimeFaces 6.0.x Zusammenfassung der neuen Funktionen
[Java11] Stream Usage Summary -Basics-
[Java] Zusammenfassung der Steuerungssyntax
Zusammenfassung der Java-Fehlerverarbeitung
[Java] Zusammenfassung der Entwurfsmuster
[Java] Neue Thread-Generierungsmethode (1)
[Java] Zusammenfassung der mathematischen Operationen
Neue Syntax für Java 12 Switch-Anweisungen
[Für Anfänger] Zusammenfassung des Java-Konstruktors
Java-Veröffentlichungsdatum und EOL-Zusammenfassung
Zusammenfassung des Pakets [Java Silver Study]
Java 9 neue Funktionen und Beispielcode
Zusammenfassung
AtCoder 400 Punkte Algorithmus Zusammenfassung (Java Edition)
Java
Java "Pass by Reference" Problemzusammenfassung
Java
Zusammenfassung der objektorientierten Programmierung mit Java
Probieren Sie Eclipse 4.7 Oxygen New 30+ / Java 10 var!
Zusammenfassung der internen Rookie-Lernsitzung [Java]