ICS3U

Accueil > Programmer avec Java > Préprarer l’environnement de développement >

📚 Utiliser Java

Survol et attentes

Définitions
REPL
une interface de ligne de commande pour un langage de programmation qui attend une entrée tapée par l’utilisateur (Read), évalue l’expression tapée (Evaluate), affiche le résultat (Print) et recommence (Loop). Le REPL Java s’appelle jshell. Les REPL sont des moyens efficaces d’exécuter des petits morceaux de code pour voir comment ils fonctionnent.
Compilateur
un programme qui traduit le code source (texte) en code objet (binaire) et l’enregistre dans un fichier. Pour exécuter le programme, il faut utiliser le code objet. Le compilateur Java s’appelle javac - dit “Java C” - mais il ne produit pas de code objet. Il produit plutôt du bytecode Java et des fichiers .class. L’avantage du bytecode est qu’il peut être exécuté sur n’importe quelle machine où la machine virtuelle Java (JVM) est installée tandis que le code objet est spécifique à une machine.
Interpréteur
un programme qui traduit le code source en code objet et l’exécute directement. L’interpréteur Java - le Java Virtual Machine (JVM) - s’appelle java mais il ne prend généralement pas le code source en entrée. Il prend plutôt le bytecode Java produit par son compilateur. Par contre, depuis Java 11 le JVM peut interpréter directement un programme qui se tient à un seul fichier de code source .java.

Objectifs d’apprentissage

À la fin de cette leçon vous devrez être en mesure de :

Critères de succès

Travailler avec des extraits de code

Pour tester des extraits de code avec Java 9 ou plus récent, on peut utiliser un REPL Java.

Le REPL Java s’appelle jshell. Pour lancer jshell, tapez simplement jshell au terminal. Vous devriez voir un prompt jshell> qui attend votre entrée.

1
2
3
4
5
PS ~\Documents> jshell
|  Welcome to JShell -- Version 20.0.1
|  For an introduction type: /help intro

jshell>

Cela signifie que le terminal attend des instructions Java qu’il peut évaluer. Essayez d’entrer une expression simple comme 2 + 2 et appuyez sur Enter. Vous devriez voir le résultat de l’expression affiché à l’écran.

1
2
jshell> 2 + 2
$1 ==> 4

Le $1 est un numéro de référence pour le résultat de l’expression. Si vous entrez une autre expression, elle sera référencée par $2, et ainsi de suite. Vous pouvez utiler ces références plus tard pour accéder à la valeur.

1
2
jshell> $1
$1 ==> 4

Pour quitter jshell, tapez la commande /exit.

1
2
jshell> /exit
|  Goodbye

Travailler avec le code source

Le code source Java se trouve dans des fichiers avec l’extension .java. Il y a trois façons de lancer un programme Java à partir de son code source :

  • l’interpréter directement via une commande au terminal
  • compiler le code source en bytecode Java et interpréter le bytecode avec des commandes au terminal
  • avec les outils d’un EDI qui compilent et interprètent le code source pour vous

L’interpréter directement avec java

Pour interpréter votre code source directement, vous avez besoin de la version Java 11 ou plus récent. Au terminal, tapez la commande suivante :

1
java chemin/au/fichier/MonProgramme.java

où vous remplacez chemin/au/fichier/MonProgramme.java par le chemin complet vers votre fichier .java. Notez que vous devez inclure l’extension .java dans le nom du fichier pour l’interpréter directement.

Note : avec Windows, le séparateur de dossiers est le \. La commande java peut reconnaître les / mais si vous tentez d’utiliser la fonction de complétion automatique de Powershell, il remplacera les / par des \.

Quelques points importants :

  • Si vous êtes dans le dossier du fichier au terminal, le chemin complet est simplement le nom du fichier. Si vous avez ouvert le dossier du projet dans votre EDI, ce sera le comportement par défaut : l’EDI ouvre le terminal dans le dossier du projet.
    1
    
      java MonProgramme.java
    
  • Si vous êtes dans un dossier différent au terminal, vous devez spécifier le chemin complet ou vous diriger dans le bon dossier au terminal avec la commande cd suivi par le chemin du dossier.
      java .\Documents\MonProgramme.java
    
      cd Documents
      java MonProgramme.java
    

Compiler et interpréter avec javac et java

Ici la même approche générale s’applique sauf qu’on lance le programme en deux étapes. L’avantage est que si le code source ne change plus, lancer le programme est plus rapide : le temps pour la compilation est déjà fait et on peut en profiter en utilisant le fichier .class déjà compilé.

Aussi, dans des programmes plus complexes qu’un seul fichier de code source, cette démarche est nécessaire pour lier les fichiers ensemble.

Vous êtes dans le bon dossier

Première fois :

1
2
javac MonProgramme.java
java MonProgramme

Après la première fois : on lance le bytecode déjà compilé

1
java MonProgramme

Notez que la commande java prend le nom de la classe, pas le nom du fichier .java.

Vous êtes dans un dossier différent

Première fois :

javac .\Documents\MonProgramme.java
java -cp .\Documents MonProgramme

Comme avec l’interprétation direct, il faut spécifier le chemin complet pour la première commande, dans ce cas javac. Pour la deuxième commande - java, on utilise l’option -cp (pour classpath) pour spécifier le dossier où se trouve le fichier .class. Finalement, on donne le nom de la classe.

Après la première fois : on lance le bytecode déjà compilé

java -cp .\Documents MonProgramme

Avec le bouton Run de l’EDI

Le bouton Run fait les mêmes choses que la section suivante mais le fait automatiquement en tentant de suivre votre structure de dossier.

Ces outils s’attendent à ce que vos programmes se trouvent directement à la racine du dossier du projet. Si vous avez des sous-dossiers pour organiser vos fichiers, le bouton Run peut ne pas fonctionner correctement et d’autres outils de l’EDI peuvent vous donner des avertissements ou des messages d’erreur. C’est le problème avec un outil qui tente d’automatiser : il ne peut pas toujours deviner ce que vous voulez faire.

Exercices

📚 Tester la compréhension

Quiz de vérification sur les outils Java

🛠️ Pratique

Ces instructions présument que vous avez fait le travail précédent (dans la leçon sur l’EDI) : le dossier “Documents” est ouvert dans VS Code et il contient le programme HelloWorld.java.

  1. Lancez le programme HelloWorld.java avec la commande java HelloWorld.java dans le terminal intégré de votre EDI.
  2. Compilez le programme HelloWorld.java avec la commande javac HelloWorld.java dans le terminal intégré de votre EDI. Rien ne devrait se produire sauf la création du fichier HelloWorld.class.
  3. Lancez le programme HelloWorld.class avec la commande java HelloWorld dans le terminal intégré de votre EDI. Notez que c’est seulement le nom de la classe qui est donné à la commande java pour utiliser le bytecode déjà compilé.
  4. Lancez le programme avec le bouton Run de votre EDI. Regardez attentivement la commande complète qui s’affiche à la console. Cette commande commence par la version longue de java, inclut quelques options que nous n’utilisons pas quand on lance la commande manuellement et se termine avec quoi : le nom d’un fichier ou le nom de la classe? Selon votre observation, est-ce que cette commande interprète directement le code source ou le compile d’abord avant de lancer le bytecode?
  5. Modifier et enregistrez le code dans HelloWorld.java, p.ex. pour afficher un message différent.
    • Interprétez directement le programme modifié avec la commande java HelloWorld.java.
    • Lancez la version compilée manuellement avec la commande java HelloWorld. Est-ce que la version compilée a changé? Si oui, qu’avez-vous fait pour que ça change? Si non, pourquoi pas?
    • Lancez le programme avec le bouton Run. Est-ce que le programme a changé? Les outils de l’EDI s’occupent de compiler automatiquement les fichiers de vos projets.