Résumé des nouvelles fonctionnalités de Java 13

Java 13 est sorti le 17/09/2019. Java SE 13 Platform JSR 388

Télécharger

J'ai pu le télécharger sur le site OpenJDK. https://jdk.java.net/13/

Actuellement, il peut être téléchargé à partir du site d'archives. https://jdk.java.net/archive/

Ce n'est pas un LTS, donc je ne pense pas qu'il soit nécessaire de le télécharger maintenant à des fins autres que la vérification. SDKMAN! est recommandé pour l'installation sur Mac et Linux

Outre Oracle Open JDK, il existe les distributions suivantes qui peuvent être utilisées gratuitement dans le commerce.

Puisqu'il ne s'agit pas de LTS, il ne semble pas être publié sur Amazon Corretto.

Oracle JDK est disponible à des fins de développement, mais vous devez acheter un abonnement Java SE à des fins commerciales.

JEP Les changements sont organisés en JEP. https://openjdk.java.net/projects/jdk/13/

Cette fois, environ 5 JEP sont inclus. 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) Un littéral de chaîne multiligne a été introduit comme aperçu.

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

L'espace s'échappant et plus ont été ajoutés pour le rendre standard dans Java 15. Consultez la description de Java 14 pour les spécifications détaillées. Résumé des nouvelles fonctionnalités de Java 14 - Qiita

JEP 354: Switch Expressions (Second Preview) Faites de l'instruction Switch une expression.

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

Par rapport à Java 12, la syntaxe de renvoi des valeurs dans les expressions de commutation est passée de «break» à «yield». Il est standardisé en Java 14. Consultez la description de Java 14 pour les spécifications détaillées. Résumé des nouvelles fonctionnalités de Java 14 - Qiita

JEP 350: Dynamic CDS Archives

Créez une archive CDS lors de l'exécution en ajoutant -XX: ArchiveClassesAtExit. Je pense que c'est une bonne référence pour savoir comment l'utiliser. Java 13 Dynamic CDS démarre plus vite que prévu - Kishida Hatena

Dans le sentiment que j'ai essayé, il était plus rapide de commencer par créer une archive CDS normalement plutôt qu'au moment de l'exécution. L'auto-dumping à partir de Java 10 est plus rapide que Dynamic CDS-Kishida Hatena

JEP 351: ZGC: Uncommit Unused Memory (Experimental)

La mémoire inutilisée dans ZGC sera libérée.

JEP 353: Reimplement the Legacy Socket API

L'API du socket TCP a été réimplémentée pour prendre en charge le traitement asynchrone dans Project Loom.

API

Certaines modifications de l'API ont également changé.

String

Des API liées à TextBlocks ont été ajoutées. Cependant, à partir de Java 13, il ne peut être utilisé à tout moment qu'en spécifiant «@ Deprecated», mais en Java 14, il ne peut être utilisé que lorsque «--enable-preview» est ajouté.

formatted Rendez String.format disponible comme méthode d'instance.

Par exemple

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

Ce qui a été écrit

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

Il est pratique d'écrire comme. https://bugs.openjdk.java.net/browse/JDK-8203444

translateEscapes Traitez \ n etc. comme des caractères d'échappement. En regardant le code, cela prête à confusion avec l'échappement, mais le «\ n» dans la chaîne est converti en saut de ligne.


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

Supprimez le retrait.

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

Get (null) pour Map avec 1 élément dans Map.of est gluant

Map.of a été ajouté dans JDK9. Dans JDK9 et JDK10, lorsque le nombre d'éléments est égal à 0, Map0 est renvoyé, lorsque le nombre d'éléments est 1, Map1, et lorsque le nombre d'éléments est égal ou supérieur à 2, une instance de MapN est renvoyée etMap.of (). Get (null)retournait null.

C:\Users\naoki>java\jdk\jdk-10.0.1\bin\jshell
|Bienvenue dans JShell--Version 10.0.1
|Pour un aperçu, tapez: /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)

Même lorsque le nombre d'éléments est 0 dans JDK11, MapN est utilisé et` Map.of (). Get (null) ʻest gluant.

C:\Users\naoki>java\jdk\jdk-11.0.1\bin\jshell
|Bienvenue dans JShell--Version 11.0.1
|Pour un aperçu, tapez: /help intro

jshell> Map.of().get(null)
|Exception 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)
|Exception java.lang.NullPointerException
|        at ImmutableCollections$MapN.probe (ImmutableCollections.java:926)
|        at ImmutableCollections$MapN.get (ImmutableCollections.java:846)
|        at (#3:1)

Dans le cas de Map.of (1,2) .get (null), null était retourné du JDK9 au JDK12. À partir de JDK13, Map.of (1,2) .get (null) sera également gluant. Les versions antérieures ont également été corrigées dans JDK 12.0.2 et JDK 11.0.4.

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

Il est également intéressant d'utiliser l'appel equals au lieu de requireNonNull pour la vérification de null.

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

Constructeur par défaut pour Number

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

Un constructeur par défaut a été ajouté à la classe Number. Cependant, l'implémentation ressemble à ceci.

public Number() {super();}

Cela n'est pas nécessaire car il est défini implicitement même s'il n'est pas défini. D'une manière ou d'une autre, il semble avoir été ajouté à la charpie folle

Ajout d'un décret à l'époque japonaise

Le nouveau numéro original "Reiwa" a commencé le 1er mai 2019. Les mises à jour de Java 8, Java 11 et Java 12 prenaient également en charge la réconciliation au niveau du format et de la perspective, mais ils n'étaient pas officiellement définis à l'époque japonaise. Depuis Java 13, vous pouvez utiliser JapaneseEra.REIWA.

Dans Java 11, le problème d'origine n'a pas été résolu, il a donc été affiché sous le nom de New Era.

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

Étant donné que le problème d'origine a été résolu dans la version 11.0.3, il a été affiché comme REIWA.

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

Pour cela, JapaneseEra.NEWERA et JapaneseEra.REIWA ont également été définis, mais comme il s'agissait d'un package privé et ne pouvait pas être utilisé à partir du code, il est devenu public à partir de Java 13 et tout le monde peut l'utiliser. devenu.

outil

Il y a quelques changements dans rmic.

Ne laissez rien passer par rmic avec --preview-feature

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

rmic à obsolète. Et puis efface

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

Il disparaît dans Java 15.

Recommended Posts

Résumé des nouvelles fonctionnalités de Java 12
Résumé des nouvelles fonctionnalités de Java 13
Résumé des nouvelles fonctionnalités de Java 10
Résumé des nouvelles fonctionnalités de Java 14
Java EE 8 (Jakarta EE 8) Résumé des nouvelles fonctionnalités
Résumé des connaissances Java
Résumé des génériques Java
Résumé relatif à Java
java1.8 nouvelles fonctionnalités
Résumé du document Java 8
Résumé du document Java 11
[Résumé] Par exemple, préparation de l'environnement Java
3ème résumé efficace de Java
Java statique [Résumé personnel]
Fonctionnalité d'expression lambda Java 8
Résumé des threads sûrs ~ Java ~
Résumé de la spécialisation des primitives Java
Résumé du lien de développement Java
Résumé personnel sur Java
Nouveautés de Java 8
Récapitulatif de la nouvelle fonction JSF2.3
résumé des expressions régulières java
Nouveautés de Java 9,10,11
Résumé du support Java 2018
Résumé du modèle de conception Java
Résumé du mot réservé Java
Résumé approximatif du flux Java8
Résumé des révisions (nouveaux problèmes de yuan) par version Java
Qu'est-ce que l'assertion Java? Résumé.
[Java] Nouvelle méthode de génération de threads (2)
[Java11] Résumé du flux -Avantages du flux-
Révision et résumé de Progate Java (débutant)
Nouvelles fonctionnalités de Java7 à Java8
[Java] Résumé des expressions régulières
[Java] Résumé des opérateurs (opérateur)
Flux Java8, résumé de l'expression lambda
Résumé orienté objet par les débutants (Java)
Résumé des bases du langage Java
Astuces Java - Résumé de l'exécution de Spring
Résumé de la classe Java Math
Résumé des nouvelles fonctionnalités de PrimeFaces 6.0.x
[Java11] Résumé de l'utilisation du flux -Basics-
[Java] Résumé de la syntaxe de contrôle
Résumé du traitement des erreurs Java
[Java] Résumé des modèles de conception
[Java] Nouvelle méthode de génération de threads (1)
[Java] Résumé des opérations mathématiques
Nouvelle syntaxe pour les instructions Java 12 Switch
[Pour les débutants] Résumé du constructeur java
Date de sortie de Java et résumé EOL
Résumé du package [Java Silver Study]
Nouvelles fonctionnalités de Java 9 et exemple de code
Résumé
Résumé de l'algorithme AtCoder 400 points (édition Java)
Java
Récapitulatif du problème Java "Pass by Reference"
Java
Résumé de la programmation orientée objet utilisant Java
Essayez Eclipse 4.7 Oxygen New 30+ / Java 10 var!
Résumé de la session d’étude interne des recrues [Java]