java syntaxe try parenthèse / java parenthesis try syntax

@NoNull @NotNull

Mettre à jour sa version Java et l'impact dans son code

La migration vers Java 9 - Blog Invivoo

État des lieux avant migration

Utiliser l’outil « jdeps » pour collecter des informations et cartographier les dépendances pour :

  • Vérifier pour chaque dépendance si une version modulaire existe,
  • Nettoyer les dépendances,
  • Prévoir les montées de version des dépendances.

De Java 8 à 11 : nouveautés et conseils pour migrer

  • De Java 7 à 9
    • Jigsaw, le système modulaire
    • Méthodes privées dans les interfaces
    • Try-with-resources
    • Instanciation de collections immuables
    • L’annotation @Deprecated enrichie
    • API Flow
    • JShell
  • Java 10
    • Inférence de type : var myList = List.of("I", "love", "Java");
    • copier une List sans craindre de modifier la copie quand la List d’origine est modifiée : var copy = List.copyOf(original);
  • Java 11
    • Inférence de type pour les paramètres de lambdas
    • Nouveau client HTTP (HttpClient est compatible avec la version 2 du protocole HTTP ainsi que les WebSocket.)

Java 16

JDK 16: What’s coming in Java 16 : Due March 2021, the next Java upgrade targets a new metaspace memory allocator, support for C++ 14 language features in JDK source code, and a vector API

Java 15

Quelles nouveautés pour Java 15 ?

  • Les classes sealed
  • Les Text Blocks en version définitive
  • Légère évolution des Records
  • Livraison de nouveaux Garbage Collectors : Les ramasses miettes ZGC et Shenandoah ne sont plus expérimentaux et sont livrés en version finale dans le JDK 15. Cependant G1 reste pour le moment le ramasse miette par défaut
  • Le JDK sur GitHub

Tutoriel pour découvrir les nouveautés de Java 15

Java 15 est sorti

Java 14

Les principales nouveautés de Java 14

Les nouveautés de Java 14 - Blog Invivoo

Détail du NPE

Quel est l’élément null dans le retour "java.lang.NullPointerException" ? message d’erreur plus précis pour les NPE, mais à condition de l'activer, car cette fonctionalité est désactivée par défaut, il faut ajouter l’option : -XX:+ShowCodeDetailsInExceptionMessages au compilateur java pour l’activer.

joueur.club().stade().name();
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "utils.stade.name()" because the return value of "utils.club.stade()" is null at features.TestJava14.main(TestJava14.java:24)

Le "record"

Pattern Matching pour instanceof

if (obj instanceof String) {    
    String s = (String) obj; // use s // Avant Java 14
    // use s // Depuis Java 14 : Avec l’utilisation du pattern matching, on simplifie l’écriture car le transtypage se fait automatiquement dans la condition. 
}

Switch mot-clé yield

String s = switch(month) {
    case JANUARY, FEBRUARY, MARCH:
        yield "Winter"; // Le Java 13 a signé l’introduction d’un nouveau mot-clé yield qui permet de faire retourner une valeur par un switch et de l’affecter à une variable.

Text Blocks (déclaration de string multilignes)

Dorénavant, il n’est plus nécessaire d’ajouter le signe + pour concaténer les lignes ni d’ajouter la séquence d’échappement \n pour le saut de ligne.
C’est remplacé par l’usage du triple guillemet """.
Si l’on ne veut pas de saut de ligne, il suffit d’ajouter à chaque fin de ligne la séquence d’échappement \.

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

Java 13

Les nouveautés de Java 13 - Blog Invivoo

  • les blocs de texte
  • l’apparition du mot clé « yield » sur les expressions switch.

Text blocks (par exemple pour vos requêtes SQL)

String sqlWithTextBlock = """
SELECT u.name FROM user AS u
JOIN city AS c ON c.id = u.city_id
WHERE city.name ?"""; // Il faut obligatoirement faire un retour à la ligne à la suite des premiers """ sinon le code ne compilera pas.

Java 12

A la découverte des nouveautés de Java 12 - Blog Invivoo

  • switch
    • les flèches
    • la portée des variables
switch (jour) {
        case LUNDI ->
            int temp = ...
            break;
        case MARDI -> 
            int temp = ...     // Çà ne cause pas problème en Java 12 contrairement aux précédente versions de Java

Java 11

Les 9 nouveautés de Java 11 - Blog Invivoo

Suppression des modules Java EE et CORBA, d’abord, après avoir été dépréciés en Java SE 9, ont été retirés de Java SE Plateform et du JDK :

  • corba
  • transaction
  • activation
  • xml.bind
  • xml.ws
  • xml.ws.annotation

Ensuite, les modules JavaFX ont également été retirés du JDK 11. Ces modules faisaient partis des JDKs Oracle précédents, mais pas des livraisons des derniers OpenJDK. Cependant, pas de panique ! Ces modules sont toujours accessibles en dehors du JDK.

JavaFX a été supprimé de la JDK Java, il faut ajouter JavaFX en tant que module externe : télécharger JavaFX.

JavaFX et l'avenir des technologies client Java

JavaFX est déjà open source depuis 2011 (OpenJFX sponsored by the Swing Group) dans le cadre de l'Open JDK, et l'évolution de la technologie sera désormais la responsabilité de la communauté OpenFX.

Cela laisse Swing et AWT, ironiquement probablement les plus anciennes des technologies Java Client, les seules qui survivront.

Java Web Start (jnlp) également supprimé

L'autre technologie de déploiement couverte, Java Web Start, qui était devenue un chemin de migration pour les développeurs s'éloignant d'Applets, sera également exclue de Java SE 11 et au-delà.

Java 10

Les nouveautés de Java 10 - Blog Invivoo

var

Le mot " var " pour déclarer une variable :

// HashMap myVar= new HashMap(); // Avant Java 10
var myVar= new HashMap(); // Depuis Java 10

Java 9

What’s New for the Java Language in JDK 9 + Java Language Changes for Java SE 9

Entre autre, un changement possible sur la portée des variables déclarées avec "try-with-resources" : The try-with-resources Statement

Java Try With Resources + Try-with-resources Java 9 Enhancement 9 + Custom AutoClosable Implementations

Après Java 8, les nouveautés de Java 9 - Blog Invivoo

Nouveautés de Java 9

Tutoriel pour découvrir les nouveautés de Java 9

Java 8

What's New in JDK 8

New Features in Java 8

lambda

Les expressions lambda

stream

Les nouveautés de Java 8 - WeLoveDevs.com

  • Les lambdas
  • Les streams sur les collections

Tutoriel sur les nouveautés du langage 8 : le projet Lambda

8 super nouveautés de Java 8 dont personne ne parle

Java 7

Utilisation des underscores dans les entiers littéraux

int maValeur = 123_1456_789;

Utilisation des strings dans l'instruction switch

switch(leCasString) {
      case "oui" : 
      case "Oui" :
        resultat = true;
        break;
      default: 
        resultat = null;
        break;
    }

L'opérateur diamant (diamond operator)

// Map<Integer, String> maMap = new HashMap<Integer, String>(); // Avant Java 7
Map<Integer, String> maMap = new HashMap<>(); // Depuis Java 7

Ressource AutoCloseable L'instruction try-with-resources

Vous pouvez implémenter vos classes avec AutoCloseable, et utiliser celles qui le sont déjà tels que les Reader, InputStream, PreparedStatement,

try (Reader closeableReader = flux) {
      int donnee;
      while ((donnee = flux.read()) >= 0) {
        System.out.print((char) donnee);
      }
    }
    // public class MaRessource implements AutoCloseable {

Exemple pour une connexion SQL, avec PreparedStatement et ResultSet auto-fermés :

String sql = "SELECT * FROM myTable";
List list = new ArrayList();
try (Connection con = ds.getConnection();
     PreparedStatement ps = con.prepareStatement(sql);) {
   
    try (ResultSet rs = ps.executeQuery();) {
        while (rs.next()) {
            list.add(rs.getInt("id"));
        }
    }
} catch (SQLException e) {
    e.printStackTrace();
}

Catching Multiple Exceptions in Java 7

// Avant Java 7
try {
    // code qui peut générer des Exception de type SQLException et IOException 
} catch(SQLException e) {
    logger.log(e);
} catch(IOException e) {
    logger.log(e);
}

// Depuis Java 7
try {
    // code qui peut générer des Exception de type SQLException et IOException 
} catch(SQLException | IOException e) {
    logger.log(e);
}

Java versions

Les dates de publication, fin de vie et support de Java : Java/OpenJDK : endoflife.date et Oracle Java SE Support Roadmap

  • 2014-2022 Java 8 (LTS)
  • 2017-2018 Java 9
  • 2018-2018 Java 10
  • 2018-2023 Java 11 (LTS)
  • 2020-2021 Java 15

JDK Release Notes