Introduction

Java est un langage de programmation originellement proposé par Sun Microsystems et maintenant par Oracle depuis son rachat de Sun Microsystems en 2010.

Java a été conçu avec deux objectifs principaux :

  • Permettre aux développeurs d’écrire des logiciels indépendants de l’environnement hardware d’exécution.

  • Offrir un langage orienté objet avec une bibliothèque standard riche

L’environnement

L’indépendance par rapport à l’environnement d’exécution est garantie par la machine virtuelle Java (Java Virtual Machine ou JVM). En effet, Java est un langage compilé mais le compilateur ne produit pas de code natif pour la machine, il produit du bytecode : un jeu d’instructions compréhensibles par la JVM qu’elle va traduire en code exécutable par la machine au moment de l’exécution.

Pour qu’un programme Java fonctionne, il faut non seulement que les développeurs aient compilé le code source mais il faut également qu’un environnement d’exécution (comprenant la JVM) soit installé sur la machine cible.

Il existe ainsi deux environnements Java qui peuvent être téléchargés et installés depuis le site d’Oracle :

JRE - Java Runtime Environment

Cet environnement fournit uniquement les outils nécessaires à l’exécution de programmes Java. Il fournit entre-autres la machine virtuelle Java.

JDK - Java Development Kit

Cet environnement fournit tous les outils nécessaires à l’exécution mais aussi au développement de programmes Java. Il fournit entre-autres la machine virtuelle Java et la compilateur.

Oracle JDK et Open JDK

Depuis 2006, le code source Java (et notamment le code source de la JVM) est progressivement passé sous licence libre GNU GPL. Il existe une version de l’environnement Java incluant uniquement le code libre : Open JDK. Depuis la version 11, Oracle distribue son propre JDK sous licence propriétaire (mais qui ne peut pas être utilisé en production) et une version sous licence GPL v2 + CPE (Classpath Exception).

Un bref historique des versions

version

date

faits notables

1.0

janvier 1996

La naissance

1.1

février 1997

Ajout de JDBC et définition des JavaBeans

1.2

décembre 1998

Ajout de Swing, des collections (JCF), de l’API de réflexion.

La machine virtuelle inclut la compilation à la volée (Just In Time)

1.3

mai 2000

JVM HotSpot

1.4

février 2002

support des regexp et premier parser de XML

5

septembre 2004

évolutions majeures du langage : autoboxing, énumérations, varargs, imports statiques, foreach, types génériques, annotations.

Nombreux ajout dans l’API standard

6

décembre 2006

7

juillet 2011

Quelques évolutions du langage et l’introduction de java.nio

8

mars 2014

évolutions majeures du langage : les lambdas et les streams et une nouvelle API pour les dates

9

septembre 2017

les modules (projet Jigsaw) et jshell

10

mars 2018

inférence des types pour les variables locales (mot-clé var)

11

septembre 2018

Nouvelle licence : la version propriétaire de Oracle JDK n’est plus utilisable gratuitement en production et requière une souscription payante. Oracle fournit cependant une distribution libre sous licence GPL v2 + CPE (Classpath Exception) disponible sur le site http://jdk.java.net/ . L’utilisation de cette distribution n’implique pas une distribution libre du code de l’application.

Suppression de certains modules dépréciés en Java 9 (CORBA, JAXB, JAX-WS…).

Nouvelle API de client HTTP.

12

mars 2019

Shenandoah : le nouvel algorithme de ramasse-miettes (Garbage collector).

Extension de l’expression switch (preview feature) : support de la arrow syntax ->, valeur de retour sur un break et possibilité de lister plusieurs constantes dans l’expression case.

13

septembre 2019

Nouvelle implémentation de la couche socket.

Extension de l’expression switch (preview feature) : introduction du mot-clé yield pour affecter le résultat d’une expression switch.

Support des blocs de texte (preview feature) en utilisant le tripe guillemet """.

14

mars 2020

Extension de l’expression switch (standard feature) : introduction du mot-clé yield pour affecter le résultat d’une expression switch.

Nouveau type record (preview feature).

Pattern matching pour instanceof (preview feature).

15

septembre 2020

Support des blocs de texte (standard feature) en utilisant le tripe guillemet """.

Hidden classes : création de classes à la volée qui ne peuvent pas être inspectées avec l’API de réflexion

Implémentation de l’algorithme de signature Edwards-Curve (EdDSA)

Sealed classes (preview feature) : Les classes (ou les interfaces) scellées permettent de restreindre l’ensemble des classes pouvant les étendre (les implémenter).

À partir de la version 12, les nouvelles évolutions dans la grammaire du langage passent par un état preview. Une preview feature est une évolution complète disponible dans une version mais qui doit être activée explicitement à la compilation. Une preview feature n’est donc pas considérée comme définitive, ni même officiellement intégrée au langage. Elle permet à la communauté des développeurs d’évaluer cette fonctionnalité. Dans une version ultérieure, cette fonctionnalité peut acquérir le statut de standard feature. Cela signifie qu’elle est pleinement intégrée au langage et qu’elle est disponible par défaut.

Par exemple, pour activer les preview features disponibles dans la version 12, il faut passer les paramètres suivants à la compilation :

javac --enable-preview --release 12 MaClasse.java

Il faut également spécifier l’activation des preview features à l’exécution :

java --enable-preview MaClasse