1. Livres & vidéos
  2. Java
  3. Présentation
Extrait - Java Les fondamentaux du langage (avec exercices pratiques et corrigés) (2e édition)
Extraits du livre
Java Les fondamentaux du langage (avec exercices pratiques et corrigés) (2e édition) Revenir à la page d'achat du livre

Présentation

Introduction

Java est avant tout un langage orienté objet, conçu pour écrire des programmes informatiques.

Java est également une plateforme de développement complète. Elle comprend un ensemble de bibliothèques, de spécifications formalisées par les JSR (Java Specification Requests), qui définissent les différentes API (Application Programming Interface ou interfaces de programmation d’application en français), ainsi que des outils pour compiler, exécuter et documenter les programmes.

Les fonctionnalités du langage Java sont réunies dans ce qui est appelé le JDK (Java Development Kit), qui fournit l’ensemble des ressources nécessaires au développement d’applications Java. Les évolutions de la plateforme sont pilotées par des propositions de la communauté Java telles que les JEP (JDK Enhancement Proposal), qui permettent d’introduire de nouvelles fonctionnalités ou d’améliorer celles existantes.

En réalité, il y a plusieurs plateformes.

La plateforme de base est nommée Java SE (Java Standard Edition) telle qu’indiqué précédemment. Elle répond à la plupart des besoins.

La seconde, Java EE (Java Enterprise Edition), est destinée au développement d’applications distribuées, notamment web....

Historique

1. Pourquoi Java ?

Bill Joy, ingénieur chez Sun Microsystems, et son équipe de chercheurs travaillaient sur le projet « Green » qui consistait à développer des applications destinées à une large variété de périphériques et systèmes embarqués (notamment téléphones cellulaires et téléviseurs interactifs).

Convaincus par les avantages de la programmation orientée objet (POO), ils choisissent de développer avec le langage C++ éprouvé pour ses performances.

Toutefois, dans le cadre de ce type de projet, C++ a rapidement révélé ses limites. En effet, de nombreux problèmes d’incompatibilité se sont posés par rapport aux différentes architectures matérielles (processeurs et taille mémoire) et aux systèmes d’exploitation rencontrés, ainsi qu’au niveau de l’adaptation de l’interface graphique des applications et de l’interconnexion entre les différents appareils.

Face à ces difficultés, l’équipe a choisi de créer un nouveau langage accompagné de sa propre plateforme de développement. Deux développeurs de chez Sun Microsystems, James Gosling et Patrick Naughton se sont attelés à cette tâche.

La création de ce langage et de cette plateforme s’est inspirée des fonctionnalités intéressantes offertes par d’autres langages tels que C++, Objective C, Perl, etc. Le fruit de ce travail est une plateforme, accompagnée d’un langage, parfaitement adaptés au développement d’applications sécurisées, distribuées et portables. Ces applications peuvent fonctionner aussi bien sur une grande variété de périphériques et de systèmes embarqués connectés en réseau, que sur Internet (clients légers) ou sur des stations de travail (clients lourds).

Le langage avait d’abord été surnommé C++--, pour marquer sa volonté de corriger certains défauts du C++. Il a ensuite porté le nom de OAK, avant que l’équipe ne découvre que ce nom était déjà utilisé dans le domaine informatique. C’est finalement le mot Java qui a été retenu - un terme d’argot américain signifiant « café » - en clin d’œil aux litres consommés par les programmeurs, notamment ses créateurs. C’est ainsi qu’en 1991 est né le langage Java.

2. Objectifs de la conception de Java

Par rapport aux besoins exprimés, il fallait un langage...

Les caractéristiques du langage Java

Java a été conçu pour répondre aux besoins du développement logiciel moderne. Ses principales caractéristiques en font un langage à la fois puissant, fiable et accessible, adapté à de nombreux contextes (applications d’entreprise, mobiles, embarquées, etc.).

  • Simple : Java élimine les aspects complexes et sources d’erreurs qu’on retrouve dans des langages C/C++, comme la gestion des pointeurs ou l’instruction goto. La syntaxe est claire, la gestion de la mémoire est automatique (grâce au ramasse-miettes), et les types de données sont limités mais cohérents.

  • Orienté objet : tout (ou presque) est objet en Java. Cette approche permet de structurer le code, de le rendre modulaire, réutilisable et facile à maintenir. Même les types primitifs peuvent être encapsulés dans des objets grâce aux classes dites enveloppes ou classes d’enrobage (« wrapper classes » en anglais). 

  • Distribué : Java intègre des outils pour le développement d’applications réparties. Historiquement avec RMI (Remote Method Invocation - ou invocation de méthode à distance, un mécanisme permettant d’appeler des méthodes sur des objets situés sur d’autres...

La plateforme Java SE

La plateforme Java SE (dans ses différents aspects) peut être représentée de manière synthétique par le schéma suivant :

images/01RI01N1.png

La plateforme installée sur le poste d’un développeur est le JDK. Il fournit des API spécifiques, mais surtout des outils d’aide au développement, comme le compilateur javac. Le JDK embarque également le JRE.

La plateforme installée sur le poste cible (celui sur lequel le programme doit s’exécuter) est le JRE. Elle propose l’API Java ainsi que les outils nécessaires à l’environnement d’exécution, comme l’outil java, qui permet de lancer un programme Java. La JVM fait partie intégrante du JRE : elle assure l’exécution effective du programme passé en paramètre à l’outil java.

Les sections suivantes présentent plus en détail les différents aspects de la plateforme.

1. La machine virtuelle Java (JVM)

La machine virtuelle constitue la base de la plateforme Java ; elle est indispensable à l’exécution des programmes Java. La JVM est disponible pour de nombreux types d’ordinateurs et de systèmes d’exploitation.

La machine virtuelle Java prend en charge plusieurs responsabilités essentielles :

  • Le chargement des classes et du bytecode qu’elles contiennent : lorsqu’un programme crée des objets ou invoque des membres d’une classe, c’est la JVM qui s’occupe de charger le bytecode correspondant afin de l’interpréter. 

  • La gestion de la mémoire : la JVM prend entièrement en charge la gestion des références aux objets. Cela permet notamment la libération automatique de la mémoire, grâce au ramasse-miettes (garbage collector), dès qu’un objet n’est plus référencé dans le programme (c’est-à-dire lorsqu’aucune variable ne le pointe).

  • La sécurité : il s’agit de l’un des aspects les plus complexes pris en charge par la JVM. Lors du chargement du programme, elle vérifie que l’on n’accède pas à de la mémoire non initialisée, qu’aucune conversion de type illégale n’est effectuée, et qu’aucune manipulation directe de pointeurs mémoire n’est réalisée.

  • L’interfaçage avec du code natif (par exemple, du code C) : de nombreuses API de base de Java s’appuient sur du code natif fourni avec le JRE afin d’interagir avec le système hôte. Ce mécanisme peut également être utilisé pour accéder à certains périphériques ou à des fonctionnalités non disponibles - ou difficilement réalisables - en Java.

Le fait que Java soit un langage interprété présente à la fois des avantages et des inconvénients. Depuis ses débuts, on lui reproche d’être moins performant que les langages compilés en code natif - un reproche qui concernait surtout les applications dotées d’une interface graphique. Pour combler cette lacune et corriger cette image souvent injustifiée, les équipes d’Oracle ont beaucoup travaillé à l’optimisation de la JVM.

Dès la version 1.2, un compilateur JIT a été introduit. Il permettait d’optimiser l’interprétation du bytecode en le transformant pour se rapprocher du code natif.

Depuis la version 1.3, la JVM intègre un processus nommé HotSpot (en versions client et serveur), qui améliore encore les performances globales, notamment l’exécution du code. HotSpot permet des gains de performance allant de 30 % à 40 % selon le type d’application - un progrès particulièrement visible dans les interfaces graphiques.

2. L’API Java

Une API (Application Programming Interface) est un ensemble de composants logiciels préconstruits, organisés de manière à permettre aux développeurs d’utiliser des fonctionnalités existantes sans avoir à les redéfinir.

L’API Java est l’API principale utilisée pour développer des applications en Java. Elle fournit une vaste collection de bibliothèques et de classes prêtes à l’emploi, qui simplifient considérablement le développement.

Dans sa version 21, l’API Java est organisée en 28 modules regroupant plus de 250 packages. Chaque package peut être comparé à une bibliothèque en langage C et contient des classes et des interfaces prêtes à l’emploi, directement réutilisables.

Ces composants couvrent un large éventail de fonctionnalités : entrées/sorties (I/O), collections, flux de données, concurrence, gestion de fichiers, bases de données, et bien plus encore.

Au total, l’API Java met à disposition environ 4 600...

Versions et releases

Il existe deux implémentations de la plateforme Java SE : Oracle JDK (également appelé Oracle Java SE) et OpenJDK. La principale différence entre les deux réside dans le fait qu’Oracle JDK inclut des outils avancés ainsi qu’un support technique dédié, accessible via un abonnement mensuel.

Cependant, grâce à la nouvelle licence Oracle No-Fee Terms and Conditions (NFTC), il est désormais possible d’utiliser Oracle JDK gratuitement, sous certaines conditions.

Ce changement marque une rupture avec la politique en vigueur depuis Java 11, où l’utilisation gratuite d’Oracle JDK était limitée aux activités de prototypage, de test ou d’apprentissage. Toute utilisation professionnelle nécessitait alors un abonnement payant.

Les fonctionnalités du langage sont identiques entre les deux plateformes. L’implémentation Oracle JDK repose sur celle d’OpenJDK.

Les versions de Java sont publiées tous les six mois dans le cadre d’un cycle de publication rapide, destiné à fournir plus rapidement de nouvelles fonctionnalités aux développeurs. Parmi ces versions, certaines sont désignées comme versions LTS (Long-Term Support), telles que Java 8, Java 11, Java 17 et, plus récemment, Java 21, sortie en septembre...

Installation du JDK

Cette section a pour objectif de décrire les principales étapes nécessaires à la mise en place d’un environnement de développement opérationnel, comprenant les éléments suivants, sur Windows, macOS et Linux.

1. Installation du JDK sur Windows

a. Installation de la plateforme OpenJDK

Pour installer la plateforme OpenJDK, réalisez les étapes suivantes :

 Accédez à la page de téléchargement : https://jdk.java.net/archive/.

La dernière version d’OpenJDK est toujours disponible à l’adresse https://jdk.java.net/23/. Pour le moment, il s’agit de la version 23, tandis que les versions plus anciennes, comme la 21, se trouvent à l’adresse https://jdk.java.net/archive/.

L’écran suivant doit apparaître :

images/01RI02N1.png

 Téléchargez la dernière archive de la release 21 adaptée à votre OS (en l’occurrence 21.0.2 pour Windows/x64). Notez l’absence d’installeur.

 Décompressez l’archive dans le répertoire de votre choix et l’installation est terminée.

b. Installation de la plateforme Oracle JDK

Pour installer la plateforme Oracle JDK, procédez comme suit :

 Accédez à la page de téléchargement dédiée à Java 21 sur le site officiel d’Oracle : https://www.oracle.com/java/technologies/downloads/#java21

 Sélectionnez l’onglet correspondant à votre système d’exploitation (par exemple, Windows).

La version 21.X.X actuelle est disponible au téléchargement. Au moment de l’écriture de l’ouvrage, la version est la 21.0.5.

images/01RI03N1.png

 Sous Windows, sélectionnez l’installeur nommé x64 Installer (par exemple : jdk-21_windows-x64_bin.exe).

 Exécutez l’installeur, puis suivez les étapes proposées.

images/01RI04N1.png

 Cliquez sur le bouton Next.

images/01RI05N1.png

 Modifiez si besoin le répertoire d’installation. Par défaut, celui-ci est défini sur C:\Program Files\Java\jdk-21\.

 Cliquez ensuite sur le bouton Next pour lancer l’installation.

images/01RI06N1.png

 L’apparition de cet écran confirme que l’installation a été effectuée avec succès. Cliquez sur le bouton Close pour terminer.

c. Configuration des variables d’environnement

Pour utiliser les outils de développement comme javac.exe ou java.exe sans devoir spécifier leur chemin d’accès complet, il est nécessaire d’ajouter le répertoire contenant ces exécutables à la variable d’environnement PATH. Ce répertoire correspond au dossier \bin du JDK.

Le répertoire d’installation du JDK peut également être représenté par la variable d’environnement JAVA_HOME, souvent utilisée par de nombreuses applications.

En conclusion, il est recommandé de procéder aux actions suivantes :

  • ajouter la variable d’environnement JAVA_HOME avec comme valeur le chemin d’accès vers le répertoire d’installation du JDK. Voici un exemple :

C:\Program Files\Java\jdk-17.0.1 
  • modifier la variable d’environnement PATH en ajoutant à la fin de cette variable le texte suivant permettant l’accès au répertoire \bin du JDK :

;%JAVA_HOME%\bin 

d. Tester le bon fonctionnement

Pour tester le bon fonctionnement, il suffit d’exécuter la commande suivante :

java --version 

Si l’installation est un succès, le résultat sera à peu près le suivant selon la version du JDK que vous avez installé :

images/01RI07N1.png

Il est possible d’installer plusieurs versions différentes sur la même machine. Cette commande permet donc de savoir quelle version est utilisée par défaut. 

2. Installation du JDK sur Linux

a. Installation de la plateforme OpenJDK

Pour installer la plateforme...

Environnements de développement intégré (IDE)

JetBrains, l’éditeur du logiciel IntelliJ IDEA, propose plusieurs éditions de cet environnement de développement. La version Ultimate est payante et offre des fonctionnalités avancées.

Dans le cadre de ce livre, nous nous intéresserons à la version gratuite et open source : IntelliJ IDEA Community Edition (CE).

1. Installation d’IntelliJ IDEA

a. Installation d’IntelliJ IDEA CE sur Mac

 Commencez par télécharger l’installeur depuis le site officiel de JetBrains : https://www.jetbrains.com/idea/download

 Sélectionnez la version correspondant à votre architecture macOS (Intel ou Apple Silicon).

images/01RI19N1.png

 Une fois le téléchargement terminé, glissez-déposez le lanceur dans le dossier Applications. L’installation d’IntelliJ IDEA Community Edition est maintenant terminée.

Vous pouvez passer à la sous-section suivante : Création d’un projet Java avec IntelliJ IDEA.

b. Installation d’IntelliJ IDEA CE sur Linux

 Pour installer l’éditeur de code sur un système Linux, commencez par télécharger l’archive correspondant à votre architecture (AMD ou ARM) depuis le site officiel de JetBrains : https://www.jetbrains.com/idea/download

images/01RI20N1.png

Une fois l’archive téléchargée, vous pouvez la décompresser via l’interface graphique de votre environnement ou en utilisant la commande suivante :

sudo tar -xvf ideaIC-2024.2.4.tar.gz 

Par défaut, le contenu sera extrait dans le répertoire courant. Vous pouvez choisir un autre emplacement si nécessaire.

 Pour lancer IntelliJ IDEA, accédez au dossier extrait, puis exécutez le script de lancement :

cd idea-IC-242.23726.103/ 
bin/idea.sh 

La version d’IntelliJ IDEA au moment de l’écriture de cet ouvrage pourrait différer de celle que vous installerez, cela n’a pas d’importance.

L’installation est maintenant terminée. Vous pouvez passer à la sous-section Création d’un projet Java avec IntelliJ IDEA.

c. Installation d’IntelliJ IDEA CE sur Windows

 Pour installer IntelliJ IDEA Community Edition sur Windows, commencez par télécharger l’installeur depuis le site officiel de JetBrains : https://www.jetbrains.com/idea/download.

images/01RI21N1.png

 Sélectionnez le fichier .exe correspondant à l’architecture de votre processeur. 

 Une fois l’installeur téléchargé, exécutez-le, puis suivez les instructions affichées à l’écran.

images/01RI22N1.png

 Cliquez sur le bouton Next pour passer aux étapes suivantes.

images/01RI23N1.png

Vous pouvez, si vous le souhaitez, modifier le répertoire d’installation d’IntelliJ IDEA. Par défaut, il est défini sur C:\Program Files\JetBrains....

Les bases de données

1. Installation de MySQL

Cette section a pour objectif de présenter l’installation du serveur MySQL ainsi que celle de DBeaver, un outil graphique open source permettant d’administrer des serveurs de bases de données.

a. Installation de MySQL Server sur macOS

 Pour installer MySQL Server sur macOS, commencez par télécharger l’installeur depuis le site officiel de MySQL. Sur la page de téléchargement, sélectionnez la version correspondant à votre système, par exemple macOS 14 (ARM, 64 bits) : https://dev.mysql.com/downloads/mysql/

 Une fois l’installeur téléchargé, lancez-le pour démarrer le processus d’installation. 

 Cliquez sur le bouton Continuer pour passer à l’étape suivante.

images/01RI36N1.png

 Acceptez ensuite les conditions de la licence, en cliquant sur le bouton Accepter, pour poursuivre l’installation.

images/01RI37N1.png

 Vous pourrez choisir d’installer MySQL Server pour un utilisateur spécifique ou pour l’ensemble des utilisateurs du système, puis cliquez sur le bouton Continuer.

images/01RI38N1.png
images/01RI39N1.png

Vous pouvez choisir un autre emplacement d’installation, mais il est recommandé de conserver l’emplacement par défaut : /usr/local/mysql

 Cliquez ensuite sur le bouton Installer pour lancer l’installation.

Selon la version de MySQL, un écran vous proposera de définir un mot de passe pour l’utilisateur root. Il est conseillé de choisir un mot de passe que vous pourrez facilement retrouver, par exemple en le stockant dans un gestionnaire de mots de passe.

images/01RI40N1.png

Une fois l’installation terminée, vous pouvez vérifier son bon fonctionnement en exécutant les commandes suivantes dans un terminal :

cd /usr/local/mysql/bin 
./mysql -u root -p 

Après avoir saisi votre mot de passe, un message de connexion au serveur MySQL devrait s’afficher.

images/01RI41N1.png

b. Création d’un utilisateur et d’une base de données sur macOS

Vous êtes maintenant connecté à la console MySQL en tant qu’utilisateur root grâce à la commande suivante :

mysql -u root -p 
  • L’option -u permet de spécifier le compte à utiliser (root).

  • L’option -p indique qu’un mot de passe doit être saisi.

 Pour quitter MySQL, entrez la commande :

exit; 

Depuis cette console, il est également possible de :

  • créer un nouvel utilisateur MySQL (par exemple mysqluser avec le mot de passe Pa$$w0rd ou tout autre mot de passe qui vous convient) :

create user 'mysqluser'@'localhost' identified by 'Pa$$w0rd'; 
  • créer une nouvelle base de données (demo_java) :

create database demo_java; 
  • accorder tous les droits à cet utilisateur sur cette base :

grant all on demo_java.* TO 'mysqluser'@'localhost'; 

Pour découvrir comment utiliser DBeaver, référez-vous à la sous-section Installation de DBeaver plus loin dans ce chapitre.

c. Installation de MySQL Server sur Windows

L’installation commence par le téléchargement de l’installeur depuis le site officiel de MySQL : https://dev.mysql.com/downloads/windows/installer/

Deux versions sont disponibles :

  • une version « en ligne », qui nécessite une connexion internet pendant l’installation ;

  • une version « complète », contenant tous les fichiers.

Cette section se base sur la version en ligne, qui télécharge uniquement les composants sélectionnés.

 Une fois l’installeur téléchargé, double cliquez dessus pour lancer l’installation.

 Sur l’écran d’accueil, choisissez l’option Custom pour sélectionner uniquement les composants souhaités, puis cliquez sur le bouton Next.

images/01RI24N.png

 Sélectionnez l’élément suivant : MySQL Server 8.0.27 - X64.

MySQL Workbench...

La javadoc

La plateforme Java SE est accompagnée d’un contenu essentiel pour les développeurs : la javadoc.

La javadoc est indispensable pour quiconque souhaite programmer en Java. Elle fournit une documentation complète de l’ensemble des classes, interfaces et autres éléments constituant l’API Java, ce qui permet aux développeurs de mieux comprendre et utiliser les fonctionnalités disponibles.

Nous verrons plus loin (cf. chapitre Programmation objet - Les commentaires) comment rédiger de la javadoc pour documenter notre propre programme Java. Pour l’instant, concentrons-nous sur la lecture de la javadoc fournie par Oracle.

Il est possible de consulter la javadoc depuis un navigateur web ou directement depuis un environnement de développement intégré comme Eclipse.

1. Consultation depuis un navigateur

La javadoc officielle est accessible à l’adresse suivante : https://docs.oracle.com/en/java/javase/21/docs/api

Il est également possible de la télécharger pour y accéder localement : https://www.oracle.com/java/technologies/javase-jdk21-doc-downloads.html

images/01RI46N1.png

 Pour effectuer l’installation en local, procédez comme suit :

  • acceptez les conditions de la licence ;

  • téléchargez l’archive ;

  • décompressez son contenu dans le répertoire de votre choix ;

  • accédez au sous-répertoire /docs/api et ouvrez le fichier index.html.

La page d’accueil affichée localement est identique à celle accessible en ligne.

images/01RI47N1.png

Cette page liste l’ensemble des modules constituant la plateforme Java SE. Ils sont regroupés en deux catégories :

  • Les modules de la plateforme Java SE, qui forment l’API Java. Le nom de ces modules commence systématiquement par java. Le contenu de ce livre s’appuiera en grande partie sur cette API.

  • Les modules complémentaires du JDK, qui forment l’API JDK. Leur nom commence par jdk. Ces modules ne seront pas abordés dans cet ouvrage. 

Pour plus d’informations à ce sujet, vous pouvez vous référer à la section La plateforme Java SE plus haut dans ce chapitre....

Le premier programme Java : Hello, World !

Il peut être tentant de créer son premier programme Java directement dans un IDE comme Eclipse, IntelliJ ou tout autre outil de votre choix. Cependant, pour bien comprendre les mécanismes fondamentaux de la création d’un programme, il est préférable de réaliser manuellement les différentes étapes avant de s’appuyer sur un environnement de développement.

1. Écriture du code

Un programme Java est composé d’un ou plusieurs fichiers texte ayant l’extension .java. Le programme le plus simple contient un seul fichier Java.

Le nom du fichier Java doit obligatoirement correspondre au nom de la classe qu’il contient. Par exemple, un fichier nommé FirstProgram.java contiendra une classe nommée FirstProgram.

La structure de base du fichier est la suivante :

public class FirstProgram 
{ 
   ... 
} 

Attention : Java est sensible à la casse. Par exemple, FirstProgram et firstprogram sont considérés comme deux noms différents.

Tout programme Java doit contenir une méthode spéciale appelée main, qui représente le point d’entrée du programme. Sa déclaration suit une structure fixe :

public static void main(String[] args) 
{ 
   ... 
} 

Nous reviendrons plus en détail sur cette méthode un peu plus loin dans l’ouvrage (cf. chapitre Comprendre un programme - Anatomie et point d’entrée d’un programme). Pour l’instant, il suffit de savoir que l’exécution d’un programme Java commence ici.

À l’intérieur de cette méthode, on peut écrire les instructions du programme. L’exemple le plus classique consiste à afficher un message à l’écran. Voici l’instruction permettant d’afficher du texte dans la console :

System.out.println("Hello, World!"); 

Le programme complet se présente donc ainsi :

public class FirstProgram { 
    public static void main(String[] args) { 
        System.out.println("Hello, World!"); 
    } 
} 

2. Compilation et exécution du code

a. Théorie

Pour qu’un programme Java puisse être exécuté, il doit passer par deux étapes essentielles : la compilation et l’exécution.

La compilation consiste à transformer le code source Java en bytecode, un langage intermédiaire. Ce bytecode est vérifié syntaxiquement par le compilateur javac, disponible sur la machine du développeur ayant installé le JDK.

Ce bytecode n’est pas un binaire natif : il ne peut pas être exécuté...

Conclusion

À l’issue de ce chapitre, vous disposez des bases nécessaires pour aborder sereinement l’apprentissage du langage Java et commencer à créer vos premiers programmes.