Accès rapide :
Prologue
Comment en est-on arrivé à Java ?
Principales caractéristiques du langage Java
Mode de distribution du langage Java
Les différentes versions du Java SE
Autre solution équivalente du marché
Bienvenue dans mon cours/tutoriel sur le langage de programmation Java. Comme vous allez vite vous en rendre compte, celui-ci commence à être assez complet. Pour en arriver à ce résultat, il m'a fallu de nombreux mois de travail, mais j'ai aussi essayé de tenir compte de tous vos avis, remarques et corrections. Afin de continuer à faire progresser ce cours, je vous encourage à me communiquer toute information utile à son amélioration : vous trouverez mon adresse e-mail en bas de chaque page du site.
Je vous souhaite un très bon apprentissage de Java et merci de votre fidélité.
Dominique
L'histoire du langage de programmation Java commence en 1991. A cette époque, la société Sun Microsystems cherchait à proposer un nouveau langage de programmation (bien que fortement inspiré de langages existants, et notamment C++) permettant le développement d'applications portables pour des systèmes embarqués (et plus précisément des appareils électroménagers) ainsi qu'un environnement d'exécution permettant l'exécution des programmes produits à partir de leur nouveau langage. La motivation de ce nouveau projet (Green Project) étant de pouvoir rendre les appareils électroménagers mieux contrôlables, plus interactifs mais aussi de permettre une communication entre ces appareils. Tous ces appareils devant être contrôlés par l'intermédiaire d'une télécommande universelle appelée *7 (prononcez Star 7). Cette télécommande reposait sur l'environnement d'exécution (un mini système d'exploitation) permettant l'exécution des programmes et la communication avec l'ensemble des appareils.
Comme nous venons de le dire, ce nouveau langage, initialement baptisé Oak (Oak signifiant chêne), s'inspirait notamment de C++. Néanmoins, celui-ci est relativement complexe et surtout peu portable (notamment à cause de la taille, non imposée, des types de données du langage). James Gosling, un des acteurs du projet (considéré désormais comme le père de Java) décida donc de créer un langage orienté objet reprenant les principales caractéristiques du langage C++, tout en modernisant son utilisation (suppression du pré-processeur, renforcement du contrôle de typage, ...). Un des points les plus importants réside dans le fait que la taille des types de données est maintenant imposée : ce point permettant de rendre les programmes plus portables afin de simplifier leur intégration dans n'importe quel type de matériel (processeurs 16 bits, 32 bits, ...). Une autre caractéristique de ce langage, et ce dès sa création, était qu'il permettait la génération d'un code machine pouvant être exécuté sur n'importe quel type de plates-formes : ce tour de force était possible grâce à l'incorporation d'un émulateur dans l'environnement d'exécution.
Malheureusement l'équipe de Sun Microsystems dû se résoudre à changer le nom de leur langage, le nom Oak étant déjà utilisé : le nouveau nom retenu sera ... Java, bien entendu. La "légende" Java veut que ce nom ait été choisi en l'honneur de la boisson préférée des programmeurs de l'équipe : à savoir un arabica de café en provenance de l'île de Java. Certains d'entre vous comprendront mieux certains logos et certaines terminologies relatifs à Java. Je pense notamment à la technologie Java Beans dont les icônes les plus souvent retenues sont des graines de café (au passage le mot anglais bean signifiant graine, de café bien entendu).
Le problème, c'est que ce projet ne connu pas le succès qu'il aurait du et, d'un certain point de vue, Java aurait pu disparaître. Néanmoins, à la même époque, le Web faisait son apparition. Le web permettait à des machines connectées via le réseau Internet, d'échanger des documents hypertextes via le protocole HTTP (HyperText Transfert Protocol) et le langage HTML (HyperText Markup Language). Or ces machines étaient (et le sont toujours) basées sur du matériel hétérogène et utilisaient de multiples systèmes d'exploitation. Comment enrichir le rendu des documents Web de l'époque étant donné cette diversité de système ? Java possédait bien entendu toutes les caractéristiques faisant de lui un langage idéal pour le Web. En 1994, Sun Microsystems développe le navigateur Web HotJava. Celui-ci intègre un environnement d'exécution Java permettant d'insérer dans les pages HTML des petites applications Java : les fameuses applets Java. Netscape intégra rapidement la technologie Java à leur navigateur et dès le milieu des années 90, Java eut le formidable essor que tout le monde lui connait aujourd'hui.
En 2009, Oracle Corporation rachète Sun Microsystems et prend ainsi le contrôle des technologies de Sun et notamment de Java. James Gosling finira par quitter Oracle en 2010, mais Java continue son développement.
Ce langage est un vrai langage de programmation : il intègre quasiment tout ce que l'on sait faire de mieux en matière de langage de programmation, tout en y enlevant ce qui s'est avéré être sources d'erreurs ou de difficultés pour le développeur. Une première caractéristique du langage Java est qu'il est pleinement orienté objet : la brique de base du programme est donc l'objet, instance d'une classe (on expliquera tout cela en détail dans le chapitre concerné).
Une autre des caractéristiques principales de ce langage est que le code Java sera compilé pour une machine dite virtuelle : le code machine résultant est nommé "Byte Code". Lors de l'exécution, le code machine produit sera transformé en un code machine compréhensible par le microprocesseur que vous utilisez. La raison de ce choix est que Java se veut portable : le programmeur ne souhaite plus faire des adaptations pour que son programme puisse fonctionner sur telle ou telle machine. Si ce choix a des points avantageux, sachez qu'il y en a aussi un qui l'est beaucoup moins : convertir une instruction de la JVM (Java Virtual Machine) en une instruction compréhensible par la machine où s'exécute le programme prend du temps. Pour palier à ce problème, deux solutions ont été proposées. La première, c'est d'inclure dans le compilateur la possibilité de compiler du code natif (pour une machine spécifique) : mais cette solution n'est pas supportée par les technologies SUN. La seconde est plus complexe : la JVM inclut un JIT (Just In Time compiler). Le JIT est chargé de traduire le code machine intermédiaire (pour la JVM) directement en code natif (cela peut être fait dès la première utilisation de la classe). Cette phase de traduction prend certes un peu de temps, mais une fois celle-ci effectuée, et ce jusqu'à la fin de l'exécution du programme, plus aucune traduction de code (sur la classe considérée) ne sera refaite. Cette technique améliore considérablement la rapidité d'exécution des programmes codés en Java.
Notez aussi qu'il existe des processeurs Java. Ceux-ci exécutent directement un programme Java sans nécessiter d'émulateur. Bien que cette solution puisse sembler intéressante, elle est rarement mise en oeuvre. Les quelques cas d'utilisation d'un processeur Java sont souvent liés à des systèmes embarqués. Effectivement, hormis le temps nécessaire à la transformation du code intermédiaire en code machine native (mais cela est fait une fois par classe au chargement de cette dernière) un processeur Java n'apportera (aujourd'hui) rien de plus par rapport à un émulateur équipé d'un JIT.
La librairie Java est très riche : elle est constituée de plusieurs milliers de classes, elles-mêmes souvent constituées de plusieurs dizaines de méthodes (de fonctions si vous préférez). Nous reviendrons ultérieurement sur ces points de terminologies. Pour l'heure, notez seulement que l'on peut quasiment tout faire en Java : de l'accès aux bases de données, de la manipulation de fichiers XML, du graphisme, des applications distribuées, des applications Web, ...
La gestion de la mémoire n'est enfin plus à la charge du programmeur : en effet, des techniques de désallocation automatisée de la mémoire existent depuis de nombreuses années, elles sont très efficaces et seuls quelques langages les intègrent (du moins à l'époque). Un garbage collector (un ramasse miettes) a donc été adjoint à l'environnement d'exécution. Vous allouez, au fil du programme, la mémoire dont vous avez besoin. Mais vous ne la libérez pas : il n'y a pas d'équivalent à free (langage C) ou à delete (langage C++).
Il n'y a pas, dans Java, de mécanisme de macro-génération de code, comme c'est le cas en C ou en C++, ainsi que pour d'autres langages. La syntaxe, ainsi que quelques points de sémantique, sont inspirés de C++ et par conséquent, de C. Ce dernier point est à notre sens une bonne chose : ces langages sont désormais rodés, ils ont fait leurs preuves et comptent désormais de nombreux adeptes de leurs très célèbres opérateurs (variable++; par exemple). Mais cet avis n'est pas forcément partagé quand on découvre la syntaxe pour la première fois. Java est aussi multithreads, distribué, robuste et sûr (sur ce point beaucoup de choses ont été faites), ...
Toutes les ressources nécessaires au développement d'applications Java sont accessibles à partir du site d'Oracle : http://www.oracle.com/technetwork/java/index.html. Vous trouverez sur ce site les environnements d'exécution Java (pour les principales plates-formes connues), les documentations sur l'API Java (la librairie de classes), les tutoriaux Java (en anglais), des forums de discussion, ... Le tout est téléchargeable gratuitement.
De plus, depuis 2007, Java est passé en "Open Source" : cela signifie que le code source de l'environnement d'exécution Java est disponible sur Internet et que vous pouvez contribuer (de différentes manières) au développement futur de Java. Pour de plus amples informations sur ce point je vous renvoie, notamment, sur le site http://openjdk.java.net/.
Plusieurs plates-formes de Java sont disponibles en téléchargement. Voici quelques informations complémentaires sur ces plates-formes :
Le Java SE (Java Standard Edition) aussi appelé JDK : cette distribution est utilisée pour développer des applications Java qui s'exécuteront directement sur un poste client. Il est décliné sous deux principales formes :
Le JRE (Java Runtime Environment) : il s'agit juste de l'environnement d'exécution. Il est nécessaire pour l'exécution d'un programme Java sur un poste client.
Le JDK (Java Development Kit) : c'est un JRE complété d'un certain nombre d'outils de développement (compilateurs notamment) et de profilage d'applications Java.
Le Java EE (Java Enterprise Edition) / Jakarta EE : un complément au Java SE permettant le développement d'application d'entreprise. On déploie les applications développées via ce standard sur un serveur d'applications compatible J2EE (Web Sphere, JBoss, Web Logic, ...).
Le Java ME (Java Micro Edition) : un ensemble de distribution "light" pour des plates-formes embarquées (téléphonie mobile, par exemple).
Il faut savoir que les versions de Java sont spécifiées par le JCP (Java Community Process). Bien que sous gouvernance Oracle, le JCP regroupe des personnes de différentes sociétés. Vous pouvez consulter ce lien pour obtenir la liste des membres actuels du JCP. Ces personnes rédigent des JSR (Java Specification Request) qui spécifient les différents aspects de la technologie Java.
Pour ce qui est du Java SE, l'ensemble des spécifications (JSR) de cette plate-forme sont reprises sur cette page : Les spécifications Java SE. Je vous invite fortement, quand vous aurez terminer ce tuto sur Java, à consulter ces documents qui sont très enrichissants.
Version du Java SE | Date de sortie | Nom de code | JSR (Java Specification Request) |
Nombre de types (proposé par l'API standard) |
---|---|---|---|---|
JDK 1.0 | 23 Janvier 1996 | Oak | 211 | |
JDK 1.1 | 19 Février 1997 | 477 | ||
J2SE 1.2 | 9 Décembre 1998 | Playground | 1524 | |
J2SE 1.3 | 8 Mai 2000 | Kestrel | JSR 58 | 1840 |
J2SE 1.4 | 6 Février 2002 | Merlin | JSR 59 | 2723 |
Java SE 5.0 | 30 Septembre 2004 | Tiger | JSR 176 | 3270 |
Java SE 6.0 | 11 Décembre 2006 | Mustang | JSR 270 | 3777 |
Java SE 7.0 | 7 Juillet 2011 | Dolphin | JSR 336 | 8000 |
Java SE 8.0 (LTS) | Mars 2014 | Spider | JSR 337 | |
Java SE 9.0 | 21 Septembre 2017 | JSR 379 | ||
Java SE 10 | 20 Mars 2018 | JSR 383 | ||
Java SE 11 (LTS) | 26 Septembre 2018 | JSR 384 | ||
Java SE 12 | 19 Mars 2019 | JSR 386 | ||
Java SE 13 | 17 Septembre 2019 | JSR 388 | ||
Java SE 14 | 17 Mars 2020 | JSR 389 | ||
Java SE 15 | 15 Septembre 2020 | JSR 390 | ||
Java SE 16 | 16 Mars 2021 | JSR 391 | ||
Java SE 17 (LTS) | 15 Septembre 2021 | JSR 392 | ||
Java SE 18 | 22 Mars 2022 | JSR 393 |
Le principal concurrent de Java n'est autre que le framework .NET de la société Microsoft. En fait les deux solutions sont extrêmement proches. Vous pourrez vous procurer le framework et trouver de nombreuses informations complémentaires à partir de l'adresse internet suivante : https://dotnet.microsoft.com/.
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :