1. Historique des versions de Java

L'histoire de Java commence en 1991, lorsqu'un groupe de programmeurs Sun décide de créer un langage pour les petits appareils : télécommandes de télévision, cafetières, grille-pain, cartes bancaires, etc.

Les fabricants de ces appareils utilisaient des processeurs très différents pour contrôler leurs produits, il est donc devenu très important d'être lié à l'architecture d'un processeur ou d'un système d'exploitation particulier.

Les créateurs de Java ont décidé de diviser le problème en deux parties : leurs programmes ne seraient pas compilés dans le code machine d'un processeur spécifique, mais dans un code intermédiaire spécial. À son tour, ce code intermédiaire serait exécuté par un programme spécial appelé machine virtuelle .

La plupart des programmeurs se réfèrent à un ordinateur comme une machine.

Intéressant.

C++ a été pris comme base du langage Java et a été grandement simplifié et standardisé. Si C++ vous permet de faire quelque chose de 10 façons, alors Java n'en a retenu qu'une seule. À certains égards, c'était comme la transition des hiéroglyphes à un alphabet.

La première version de Java est sortie en 1996. Depuis lors, Java a commencé sa marche triomphale autour du monde, qui, à son tour, a stimulé l'évolution et la croissance du langage lui-même. Aujourd'hui, des millions de bibliothèques et des milliards de lignes de code sont écrites en Java, et de nouvelles versions de Java sortent tous les 6 mois :

Nom Année Nombre de cours
JDK 1.0 1996 211
JDK 1.1 1997 477
J2SE 1.2 1998 1 524
J2SE 1.3 2000 1 840
J2SE 1.4 2002 2 723
J2SE 5.0 2004 3 279
Java SE 6 2006 3 793
Java SE 7 2011 4 024
Java SE 8 2014 4 240
Java SE 9 2017 6 005
Java SE 10 2018 6 002
Java SE 11 2018 4 411
Java SE 12 2019 4 433
Java SE 13 2019 4 515

Bien que des versions de Java sortent régulièrement, elles n'ont pas toutes la même signification pour les programmeurs : Java a évolué par à-coups.


2.Java 2

Le premier grand bond en avant s'est produit avec la sortie du JDK 1.2. Il y avait tellement d'innovations que les créateurs de Java l'ont renommé Java 2 Platform Standard Edition ou J2SE 1.2 en abrégé.

Les principales nouveautés étaient :

  • strictfpmot-clé
  • La bibliothèque Swing pour travailler avec des graphiques
  • Le compilateur JIT, qui accélérait l'exécution des programmes Java
  • Un vaste ensemble de collections
  • Prise en charge complète d'Unicode : japonais, chinois et coréen.

Aujourd'hui, ces innovations ne semblent pas si grandes, mais chaque grand projet naît d'un petit. Java ne serait pas aussi populaire aujourd'hui si un petit groupe de programmeurs n'avait pas continué à améliorer le langage il y a 20 ans.


3.Java 5

Le JDK 1.5 est sorti en septembre 2004. Il a également introduit de nombreuses innovations, il ne pouvait donc que mériter un nouveau nom : au lieu des versions 1.5, 1.6 et 1.7, ils ont décidé d'utiliser les versions 5.0, 6.0 et 7.0. Ainsi, le nom complet de JDK 1.5 était Java 2 Standard Edition 5.0

Cette mise à jour comprenait des éléments sans lesquels le développement ultérieur du langage n'aurait pas été possible.

Annotations . La moitié des principaux frameworks modernes sont construits sur des annotations, de Spring et Hibernate à JUnit.

Génériques . Les génériques ont propulsé le pouvoir des collections (et bien plus encore) vers de nouveaux sommets. Le code est devenu plus simple, plus compact et plus sûr.

L'autoboxing/unboxing est une conversion automatique entre les types primitifs et leurs types wrapper. Cela a rendu beaucoup plus facile l'écriture et la lecture de code, et a rendu les collections encore plus populaires.

La foreachboucle représente désormais au moins la moitié de toutes les boucles écrites par les programmeurs. Et, bien sûr, il est indispensable lorsque vous travaillez avec des collections.

L' énumération est une autre nouvelle fonctionnalité intéressante. Il permet à beaucoup de choses d'être magnifiquement simplifiées.

Ce ne sont pas toutes les innovations : des centaines de nouvelles classes ont été ajoutées. L'important est qu'il s'agissait exactement des bonnes innovations et qu'elles ont donné un nouvel élan puissant à la popularité de Java.


4.Java 6

Java 6 est connu pour un grand nombre de petites améliorations et l'abandon du chiffre 2 dans le nom : ce n'était plus "Java 2 Standard Edition 6.0", mais simplement "Java Standard Edition 6.0".

Voici quelques-unes des innovations intéressantes :

L' API du compilateur Java a permis d'appeler le compilateur Java directement à partir du code. Cela signifie que votre programme peut maintenant générer du texte représentant le code de la classe, le compiler en appelant des méthodes de l' API Java Compiler , puis commencer immédiatement à appeler les méthodes de la classe compilée. Il y a des domaines entiers de développement où cette capacité simplifie grandement la vie.

Il est devenu possible d'exécuter JavaScript directement à l'intérieur d'un programme Java. Cette fonctionnalité est apparue parce que JavaSE 6 incluait le moteur JavaScript de Rhino.


5.Java 7

Java 7 est sorti en juillet 2011. Il devait y avoir de nombreuses améliorations, mais les programmeurs n'ont réussi qu'à ajouter une petite partie de ce qui était prévu. En particulier, ils ont ajouté des choses comme :

Une nouvelle bibliothèque pour travailler avec l'entrée et la sortie de données. Connue sous le nom de New Input Output API , elle se trouve dans le java.niopackage.

L' inférence de type automatique du compilateur Java au moment de la compilation permet aux programmeurs d'écrire moins de code. Le compilateur est devenu plus intelligent, et ce n'était que le début.

L'instruction switch a acquis la possibilité d'utiliser des chaînes comme valeurs de cas.

La gestion automatique des ressources s'est également améliorée de manière significative : avec la try-with-resourcesconstruction, un programme Java peut fermer les flux de données pour vous lorsqu'ils ne sont plus nécessaires.

Il y a eu de nombreux autres changements, mais ils ne sont pas si importants à notre stade actuel d'apprentissage de Java.


6.Java 8

Java 8 est sorti en mars 2014 et était la mise à jour récente la plus puissante de Java.

Surtout, les programmeurs s'en souviennent pour son ajout d'expressions lambda et d'interfaces fonctionnelles (l' @FunctionalInterfaceannotation). Nous les examinerons au niveau 21. Votre code ne sera plus jamais le même.

Des flux ont également été ajoutés pour les collections, ce qui, en combinaison avec des expressions lambda, a permis d'écrire du code de manière beaucoup plus compacte. Bien que pas toujours beaucoup plus lisible.

Intéressant.

Et le troisième grand changement a été l'introduction par Java 8 d'une toute nouvelle API pour travailler avec les dates et les heures - l' API Date Time . Nous l'étudierons prochainement.


7.Java 9

Java 9 est sorti en septembre 2017. À partir de ce moment, les créateurs de Java ont décidé de publier de nouvelles versions plus fréquemment - tous les six mois. Ils ont probablement été impressionnés par l'approche adoptée par les développeurs du navigateur Google Chrome.

La version Java 9 s'est davantage concentrée sur les composants internes de la machine Java. La chose la plus importante qu'il apportait aux programmeurs ordinaires était la possibilité de diviser un programme en modules. C'est très pratique lorsque vous avez des dizaines de milliers de classes ou lorsque votre code décharge dynamiquement des plugins.

Mais cela ne nous servira probablement pas à grand-chose dans un futur proche.


8.Java 11

Six mois après la sortie de Java 9, Java 10 est sorti, et six mois plus tard, Java 11 est sorti.

De nombreuses petites améliorations ont été apportées pendant cette période, mais vous n'en retiendrez probablement que deux :

Il a ajouté la prise en charge d'Unicode 10. Vous pouvez désormais utiliser des emojis dans vos programmes Java. Vous pouvez les utiliser de la même manière que vous travaillez avec le type booléen :

L'inférence de type a été améliorée et le varmot-clé , qui vous plaira certainement, est apparu.

Maintenant, vous pouvez écrire ce qui suit :

var str = "Hello";

Et le compilateur convertit ceci en :

String str = "Hello";

Mais il y a aussi eu quelques pertes. Les créateurs de Java ont abandonné des bibliothèques telles que JavaFX, Java EE et CORBA de JDK 11.


9. Importance de la compatibilité

Lorsqu'une nouvelle version est publiée, les programmeurs veulent bien souvent repartir de zéro. Après tout, qui veut corriger un tas d'anciens bogues alors qu'ils sont absolument sûrs que le code aurait dû être écrit dès le début ?

Mais l'histoire ne soutient pas une telle approche. Chaque fois que les programmeurs publient une nouvelle version d'un programme, 90 % de ses utilisateurs utilisent une ancienne version. Ils peuvent utiliser ou ignorer les nouvelles fonctionnalités du programme, mais ce que les utilisateurs détestent, c'est quand quelque chose qui fonctionnait bien cesse de fonctionner.

De nombreux excellents produits sont morts lorsque les programmeurs ont publié de nouvelles versions qui n'étaient pas compatibles. Ou simplement quand ils ont fait des changements majeurs. Par exemple, l'idée d'abandonner le bouton Démarrer dans Windows 8 n'a pas séduit les utilisateurs. La sortie de Windows 10 a ramené la moitié de ce qui avait été supprimé dans Windows 8.

De plus, Windows vous permet d'exécuter des programmes écrits il y a 20 ans pour Windows 95 ou même écrits il y a 30 ans pour MS DOS 3.0 — ils fonctionneront. C'est l'une des raisons pour lesquelles Windows reste populaire.

Et Java ne serait pas aussi populaire qu'il l'est si ses développeurs ne se souciaient pas de la compatibilité. Chaque fois qu'il y a une nouvelle version de la machine Java, une nouvelle version du SDK ou des modifications majeures des classes, tout le code Java écrit depuis janvier 1996 continue de fonctionner.

Ceci est généralement réalisé en ajoutant uniquement de nouvelles méthodes, classes et packages, sans rien supprimer. Cette approche a ses avantages et ses inconvénients.

D'une part, Java traîne un tas de bagages sous la forme d'un code ancien, sous-optimal et inutile. D'autre part, votre projet écrit en Java 11 peut toujours utiliser une bibliothèque écrite en Java 8 qui utilise des bibliothèques écrites en Java 5 et Java 2. Ce méli-mélo de code fonctionnera très bien.

Avec le langage C++, les bibliothèques compilées pour les plates-formes 32 bits et 64 bits ne peuvent pas être utilisées dans le même projet. Et vous aurez un énorme mal de tête si vous découvrez soudainement que le chartype utilisé dans une bibliothèque utilise un octet, tandis qu'une autre utilise deux octets.


10. Obsolète

Ainsi, les créateurs de Java ont décidé de ne rien supprimer, mais seulement d'ajouter de nouvelles classes et packages. Mais comment font-ils savoir aux programmeurs qu'il existe une nouvelle alternative valable à une solution sous-optimale existante ?

Pour ce faire, ils sont venus avec l' @Deprecatedannotation.

Si une méthode ou une classe est obsolète, cette annotation est ajoutée à côté de sa déclaration. Cela signifie que les programmeurs sont découragés d'utiliser le code.

Vous pouvez toujours utiliser une classe ou une méthode obsolète, mais cela n'est pas recommandé.

Et à quelle fréquence les gens font-ils des choses qui ne sont pas recommandées ? Presque toujours 🙂

De nombreuses classes sont obsolètes depuis 20 ans - elles ont été utilisées et sont toujours utilisées. Les gens les connaissent ou ils sont simplement pratiques. Mais il y a un risque qu'ils soient supprimés à un moment donné, il vaut donc mieux ne pas les utiliser.

Tous les IDE modernes, y compris IntelliJ IDEA, peuvent gérer l' @Deprecatedannotation. Les noms des classes et des méthodes obsolètes sont affichés à l'aide d' un formatage barré . Quelque chose comme ça:

Date date = new Date();
int day = date.getDay();

Les classes obsolètes sont très populaires et se trouvent souvent dans le code, nous en examinerons donc bientôt certaines.