Pourquoi apprendre Java en 2024 ?

Qu'est-ce que le langage Java ?

Histoire de Java

Le langage Java est un langage de programmation multi-paradigmes.

Il a été créé en 1994 par James Gosling, employé de Sun Microsystems. La première version officielle a été présentée le 23 mai 1995.

Par la suite, la société Sun a été rachetée par Oracle en 2009 qui détient désormais Java. A noter qu'il existe une version open source de Java : OpenJdk (que nous utiliserons au cours de cette formation).

Malgré son ancienneté, le langage est toujours très utilisé actuellement et la version Java SE 21 est sortie le 19 septembre 2023. (SE : Standard Edition).

ll est réputé comme étant un langage de programmation portable : tout code compilé en Java sera exécutable sur n'importe quel système d'exploitation en utilisant la machine virtuelle Java (JVM).

Il a été nommé Java en l'honneur de la boisson préférée des programmeurs, c'est-à-dire le café, dont une partie de la production provient de l'île Java. On comprend alors pourquoi le logo ressemble à une tasse de café :

Caractéristiques principales de Java

Java est un langage compilé. Contrairement au C, il n'est pas traduit directement en langage machine, mais en un code intermédiaire formé de bytecodes. La particularité de ce code intermédiaire est qu'il est exécutable dans la JVM, ce qui permet de faire abstraction du système d'exploitation sous-jacent et de rendre le code portable.

Java est un langage avec un typage statique fort. Cela signifie que le typage des variables est obligatoire pendant l'écriture du code. C'est vérifié lors de la compilation en amont de l'exécution du programme (à l'inverse du typage dynamique d'un langage interprété). Il est fortement typé car il est impossible de définir une valeur qui ne correspond pas au type choisit car cela provoque une erreur de compilation.

Java est un langage avec une gestion automatique de la mémoire par ramasse-miettes (garbage collector). Cela signifie que la mémoire sera  automatiquement allouée et libérée à l'exécution des programmes dans la JVM.

Java est historiquement vu comme un langage orienté objet (OOP). Aujourd'hui, il est plutôt multi-paradigmes suite aux très nombreuses mises à jour du langage. Il peut donc être utilisé en programmation fonctionnelle, impérative, générique, etc.

Java est un langage de haut niveau avec une syntaxe simple. Cela signifie que le langage cherche à être proche du langage naturel pour simplifier son utilisation, contrairement à un langage de bas niveau qui cherche à être au plus près des caractéristiques techniques de l'ordinateur (registres, processeurs, mémoire etc).

Enfin, Java est un langage multiplateformes. En plus d'être portable, cela signifie que le langage est exécutable sur différents types de machines : téléphones portables, voitures, systèmes embarqués, etc.

Utilisations de Java

Java est utilisé par la plupart des grandes entreprises pour sa robustesse et sa portabilité : Google, Microsoft, Airbnb, Ebay, Netflix, Spotify, etc.

Java est surtout prisé aujourd'hui par les grandes entreprises pour développer des applications côté serveurs (ou "backend"), comme le montre le graphique suivant :

Celui-ci montre comment Java est utilisé selon les résultats de l'état de l'écosystème des développeurs 2020 produit par JetBrains.

Si le langage est si prisé par les grandes entreprises, c'est notamment  parce que les mises à jour majeures du langage amènent très peu de changements cassants. Cela facilite les migrations des bases de codes importantes.

Programmation de services Web

Java est très performant pour développer des services Web.

Il est en effet possible de créer des services aussi bien performants que sécurisés grâce à des frameworks comme Spring Boot.

Programmation asynchrone

Java possède de très gros atouts pour simplifier le développement d'applications asynchrones. Cela permet d'obtenir des applications très performantes quand celles-ci sont soumises à de très grosses charges d'utilisation en parallèle. Il existe des librairies qui facilitent grandement la programmation asynchrone comme Reactor.

Reactor se base sur la programmation dite réactive pour rendre la programmation asynchrone plus accessible (il existe aussi des librairies réactives dans d'autres langages comme Typescript par exemple).

Tests automatisés

Java est également un langage très puissant car il possède un très bon framework de tests automatisés : JUnit.

Un framework de test bien réalisé est un facteur très important lors du choix d'un langage de programmation. Or, JUnit est un framework très complet et intuitif pour la création de tests automatisés. De plus, il existe aussi des librairies de test pour améliorer son utilisation.

Programmation d'interfaces graphiques

Même si Java est très prisé pour faire du code serveur, il est également possible de développer des clients lourds avec JavaFx.

Si vous souhaitez développer des clients légers pour navigateur, il est préférable d'utiliser des frameworks Typescript / Javascript.

Communauté du langage Java

Java fait partie des langages les plus stables en popularité depuis le début des années 2000 :

Cette courbe décrit l'évolution de la popularité des principaux langages de programmation selon l'index TIOBE. On peut voir que Java a régulièrement été le langage le plus populaire par le passé et il se classe troisième en Mars 2023. Cela prouve une longévité remarquable de Java qui est une technologie éprouvée et compétitive.

Cette popularité se traduit par un engouement mondial du langage selon les résultats de l'état de l'écosystème des développeurs 2020 produit par JetBrains :

On voit bien que la communauté Java représente des millions de développeurs. Vous n'aurez aucun mal à trouver des développeurs expérimentés pour vous aider si vous êtes bloqués dans le développement de vos programmes Java.

Fonctionnement d'un compilateur

Un compilateur est responsable de convertir du code source qui respecte une certaine syntaxe en code machine exécutable par l'ordinateur.

Voici les principaux avantages qu'offre un langage compilé :

  • Ils sont plus performants que les langages dits "interprétés" qui font toutes les étapes d'interprétation et d'exécution du code à la volée.
  • Le code source écrit ne compile pas s'il contient des erreurs. Il n'y par exemple pas besoin d'exécuter son programme pour détecter des erreurs de typage, il suffit de compiler.

D'un autre côté, un langage compilé possède généralement le désavantage suivant :

  • Un compilateur fabrique du langage machine compatible avec le type de machine utilisé. Le programme obtenu ne sera donc pas exécutable sur un autre type de machine (OS ou architecture différente).

Java est-il un langage compilé ?

Oui et non, il y a bien une étape de compilation, mais ce n'est pas un langage uniquement compilé. On dit que Java est plutôt un langage "semi interprété".

Pour le comprendre, voici les étapes de compilation et d'exécution de Java :

  1. Écriture du code source Java
  2. Compilation du code source : Le résultat n'est ici pas du code machine comme pour un langage compilé classique. Le résultat obtenu est du bytecode intermédiaire
  3. Exécution du bytecode dans la JVM (Java Virtual Machine)

Le bytecode est un langage intermédiaire entre le code source et le code machine qui permet l'exécution d'applications Java multiplate-forme puisque il est indépendant de tout système d'exploitation.

C’est alors que la JVM entre en compte pour rendre cette exécution possible. Elle est disponible sur la plupart des OS pour interpréter le bytecode. Elle est aussi disponible sur nombre de systèmes embarqués.

Les outils du JDK (Java Development Kit)

Le JDK fournit un ensemble d'outils pour compiler et exécuter du code Java.

Le compilateur Javac

Cet outil est le compilateur : il utilise des fichiers source Java pour créer des fichiers contenant le bytecode Java correspondant. Pour chaque fichier source .java, un fichier portant le même nom avec l'extension .class est créé si la compilation se déroule bien. En cas d’erreur d’écriture du code source, il y aura des erreurs relevées par le compilateur et aucun bytecode ne sera alors généré.

Exemple de compilation en ligne de commande :

javac MaClasse.java

L'exécution de cette commande résulte en la création d'un fichier MaClass.class qui contient le bytecode du code compilé.

L'interpréteur java / javaw

Cet outil est l'interpréteur de bytecode : il lance la JVM, charge les classes nécessaires et exécute la méthode main de la classe passée en paramètre. La méthode main et le point d’entrée des programmes Java et doit exister dans le code source.

Exemple d’exécution de bytecode en ligne de commande :

java MaClasse / javaw MaClasse

La commande java ouvre une console et exécute le bytecode MaClass.class. La commande javaw exécute le bytecode MaClass.class mais n'ouvre pas de console.

L'outil jar

Jar est le diminutif de Java ARchive. C'est un format de fichier qui permet de regrouper des fichiers contenant du bytecode Java (fichier .class) ou des données utilisées en tant que ressources (images, son, ...). Ce format est compatible avec le format ZIP : les fichiers contenus dans un jar sont compressés de façon indépendante du système d'exploitation. On peut par exemple créer un seul fichier .jar exécutable qui sera le fichier final de l’application que l’on souhaite créer.

Exemple de commande jar :

jar cf test.jar *.class

Cette commande résulte en la création d'un jar avec tous les fichiers .class

 Pour apprendre Java, suivez notre formation très complète !