Les exercices qui vous sont proposés ici ont pour but de vous faire expérimenter les outils de base du JDK (Java Development Kit) : compilateur, machine virtuelle, documentation...
pour en savoir plus sur JSE (Java Standard Edition) et le JDK: http://www.oracle.com/technetwork/java/javase/overview/index.html
Exercice 0 : Préparation du TP
Organiser votre espace de travail
Avant tout chose organisez votre espace disque afin de pouvoir par la suite retrouver facilement le travail effectué lors des différentes séances de TPs. Pour cela :
- créez dans votre répertoire PLAI un sous répertoire Java dans lequel vous mettrez tous les TPs concernant cette partie du cours.
- dans le répertoire Java créez un sous répertoire TP01 dans lequel vous rangerez le travail effectué au cours ce premier TP.
Vérifier la présence de java sur votre poste de travail
- ouvrir une fenêtre de commandes
- fenêtre Xterm sous Unix,
- fenêtre d'invite de commandes sous Windows (menu
Démarrer->Exécuter->cmd
) (Attention ! pas command.com qui est du vrai MS-DOS pur jus : pas de rappel des commandes (doskey), noms limités à 8 caractères...)
- dans cette fenêtre de commandes taper :
java -version
la réponse doit êtrejava version "1.8.0"
ou un numéro de version supérieur.javac
la réponse doit êtreUsage: javac <options> <source files> ...
Si vous n'obtenez pas les réponses attendues, il faut installer le JDK et configurer votre environnement avant de pouvoir travailler :
- Installation sous windows :
- documentation d'installation
- Voir la vidéo : installer JDK 17 sous Windows 10.
- Installation sous linux
- Installation sous MacOS
Exercice 1 : consulter la documentation en ligne de Java SE
Ce premier exercice a pour but de vous faire parcourir la documentation de Java SE mise en ligne par Oracle afin de vous familiariser avec son organisation. NE LE NEGLIGEZ PAS ! Pour pouvoir travailler efficacement avec java, il est essentiel de savoir vous servir de cette documentation et de situer rapidement les éléments qui pourraient vous être utiles.
Plusieurs versions de Java SE sont disponibles, la dernière en date (au 03/01/2022) étant la version 17. Lorsque vous utilisez les documentations du JDK, il vaut mieux vous référer à celle correspondant à la version installée sur votre machine (voir exercice 0) :
- La documentation de Java SE version 8 est disponible à l'URL http://docs.oracle.com/javase/8
- La documentation de Java SE version 17 est disponible à l'URL http://docs.oracle.com/javase/17
1.1 Tutoriaux java en ligne
En partant de la page d'accueil de la documentation du JDK retrouvez la page du site officiel d'Oracle pour les tutoriaux en ligne de Java SE (voir image ci-dessous).
Quelle est l'URL de la page d'accueil du Tutorial (pensez à l'enregistrer dans vos favoris, elle vous sera utile par la suite) ?
-
Dans la terminologie du Java Tutorial qu'est-ce qu'un trail
-
Sur la page d'accueil du Java Tutorial, combien de trails sont-ils proposés pour couvrir les bases du langage Java ?
-
Que sont les Learning Paths et à quoi servent-il ?
-
Quels aspects de la plateforme Java couvrent chacun des 4 learning paths proposés ?
1.2 Documentation de l'API de Java SE (8 et 17)
En partant de la page d'accueil de la documentation JDK 8, retrouvez la page présentant l'API Java 8 (voir figure ci-dessous).
-
Quelle est l'URL de cette page ? Pensez à l'enregistrer dans vos favoris, elle vous sera utile par la suite.
-
Que signifie le terme API ?
-
L'API Java est structurée autours de la notion de package. Qu'est-ce qu'un package Java ?
Retrouvez la documentation de la classe Math
de
l'API java, classe définie dans le package java.lang
.
-
Quel est le rôle de cette classe ?
-
Quel est le nom et la signature de la méthode qui permet de transformer une valeur exprimée en radians en une valeur exprimée en degrés ?
-
Retrouvez la documentation du package
java.net
.Que propose ce package ?
-
Quel est le nom de la classe de ce package qui permet de représenter sous forme d'un objet java une adresse IP v6 ?
-
Retrouvez la documentation de la classe
String
.A quel package appartient cette classe ?
-
A quoi sert cette classe ?
-
Que fait la méthode
toUpperCase
de cette classe ?
En partant de la page d'accueil de la documentation JDK 17, retrouvez la page présentant l'API Java 17(voir figure ci-dessous).
-
Quelle est l'URL de cette page ? Pensez à l'enregistrer dans vos favoris, elle vous sera utile par la suite.
-
Sur cette page les packages n'apparaissent plus directement. L'API est structurée autour de la notion de modules. Qu'est-ce qu'un module ?
-
Dans quel module se trouve le package java.lang
-
En utilisant l'outil Search situé en haut de la page de l'API retrouvez la description de la classe Frame. A quel package appartient cette classe ?
1.3 Documentation des outils du JDK
En partant de la page d'accueil de la documentation JDK retrouvez la page présentant la documentation des outils du JDK (pensez à l'enregistrer dans vos favoris, elle vous sera utile par la suite)
Parcourez cette documentation pour voir les outils de base du JDK. Pour chacun des outils suivants indiquez son rôle :
- javac
- java
- javadoc
- javap
- jdb
- jar
-
Que signifie l'acronyme
jar
et qu'est-ce qu'un fichier.jar
? -
Que signifie l'option
-showversion
de l'interpréteurjava
? Quelle est la différence avec l'option-version
?
Exercice 2 : compiler et exécuter un programme java
Exercice 2.1 : HelloWorldApp
Cet exercice reprend la leçon The "Hello World !" Application du programme d'apprentissage Getting Started des tutoriaux java d'Oracle (voir Exercice 1.1.).
Nous n'allez pas ici, suivre ce tutoriel dans son entier, vous pourrez vous y référer pour les étapes de compilation et d'exécution si nécessaire.
-
Dans votre répertoire de travail (PLAI/Java/TP01) créez un répertoire exercice2.
-
Dans ce répertoire PLAI/Java/TP01/exercice2, créez avec n'importe quel éditeur de texte de votre choix (par exemple gedit sous linux, notepad++ sous windows) un fichier
HelloWorldApp.java
dont le contenu est le suivant :/** * The HelloWorldApp class implements an application that * simply prints "Hello World!" to standard output. */ public class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); // Display the string. } }
- Compilation de l'application
HelloWorldApp.java
.Quelle commande utilisez-vous pour compiler le fichier
HelloWorldApp.java
?
..........................................................................................Quel est le nom du fichier créé par cette commande de compilation ?
...............................................................................................-
Que contient-il ? (Affichez son contenu sur la console, commande
type
sous Windows,more
ouless
sous Unix)
............................................................................................... Invoquez la commande
javap -c HelloWorldApp
. Quel est l'effet de celle-ci ?
...................................................................................................
-
Quelle commande utilisez-vous pour executer l'application
HelloWorldApp
sur la machine où vous l'avez compilée ?
................................... ......................................................................... -
Modifiez le programme
HelloWorldApp.java
que vous avez écrit dans l'exercice 1 de manière à ce qu'il provoque l'affichage suivant :BONJOUR CECI EST MON PREMIER PROGRAMME JAVA
ou tout autre texte de votre choix.....
récompilez le et exécutez le.
Exercice 2.2 : Portabilité du code Java
Si les versions de java sont compatibles, un même programme doit pouvoir être exécuté sur des machines différentes sans nécessiter de recompilation.
Dans cet exercice vous allez devoir accéder au réseau de l'UFR IM2AG. Pour cela il faut au préalable vous connecter sur le VPN de l'UGA.
-
Recopiez le Byte Code de l'application
HelloWorldApp
sur la machineim2ag-mandelbrot.univ-grenoble-alpes.fr
de l'UFR IM2AG . Par exemple, depuis un fenêtre terminal utilisez la commandescp
:>scp HelloWorldApp.class votreLoginAgalan@im2ag-mandelbrot.univ-grenoble-alpes.fr:HelloWorldApp.class
Sous Windows, une alternative à la ligne de commande est l'utilisation du client SSH Bitvise que vous pouvez télécharger et installer gratuitement sur votre machine. il vous permettra de faire toutes les commandes via son interface graphique.
-
Depuis un fenêtre terminal connectez-vous via ssh sur la machine
im2ag-mandelbrot.univ-grenoble-alpes.fr
. Pour vous connecter par ssh :>ssh votreLoginAgalan@im2ag-mandelbrot.univ-grenoble-alpes.fr Password:votre mot de passe >
-
Sans la recompiler, exécutez l'application
HelloWorldApp
. Qu'observez-vous ? A votre avis pourquoi obtenez-vous ce résultat ?..........................................................................................................
..........................................................................................................
.......................................................................................................... -
Recompilez l'application
HelloWorldApp.java
sur cette seconde machine et verifiez qu'elle s'exécute correctement. -
Déconnectez-vous de la machine
im2ag-mandelbrot
(commandeexit
) et recopier sur votre machine personnelle le bytecode que vous venez de générer sur le serveurim2ag-oracle.e.ujf-grenoble.fr
>scp votreLoginAgalan@im2ag-mandelbrot.univ-grenoble-alpes.fr:HelloWorldApp.class HelloWorldApp.class
-
exécutez à nouveau, sans recompiler, l'application
HelloWorldApp
sur votre poste de travail. Que constatez-vous ?..........................................................................................................
..........................................................................................................
.......................................................................................................... -
Des observations précédentes, pouvez-vous résumer en une phrase sous quelles conditions un programme java compilé sur une machine A peut être exécuté sans recompilation sur une machine B ?
..........................................................................................................
..........................................................................................................
..........................................................................................................
Exercice 2.3 : Arguments de la ligne de commandes
-
Sauvegardez dans votre répertoire de travail le programme que vous pouvez télécharger en cliquant sur le lien suivant
Hello2.java
. -
Compilez ce programme et executez le successivement avec les commandes :
java Hello2
java Hello2 Marie
java Hello2 Pierre Paul Jacques
-
Constatez. En observant le source du programme
Hello2.java
, que pouvez-vous en déduire sur le rôle du paramètreargs
de la méthodemain
?.............................................................................................................
.............................................................................................................
Exercice 2.4 : Méthodes dépréciées
-
Créez une classe Java qui contient le programme ci dessous
import java.util.Date; public class AfficherHeure { public static void main(String[] args) { Date d = new Date(); System.out.print("il est " + d.getHours() + " h "); System.out.print(d.getMinutes()+ " m "); System.out.println(d.getSeconds() + " s"); } }
-
Compilez la classe
AfficherHeure
. Que constatez vous ?D'après vous le bytecode généré (fichier
AfficherHeure.class
) est-il exécutabe ? Vérifiez........................................................................................................................
-
La compilation de cette classe vous indique que certaines méthodes utilisées par ce programme sont dépréciées. Présentes dans les premières versions de la plateforme java, ces méthodes ont depuis été remplacées par de nouvelles méthodes introduites dans les versions successives de la plate-forme java. Toutefois les messages de "dépréciation" sont simplement des avertissements (warnings), le code compilé est exécutable. Ces messages sont là pour signifier au programmeur l'utilisation de méthodes dépréciées qui peuvent s'avérer dangereuses ou risquent de ne plus être supportées dans de futures versions de java et qu'il serait préférable de remplacer par de nouvelles fonctionnalités de la plate-forme java.
Quelle option du compilateur
java
permet de voir le détail des méthodes dépréciées ?
....................................................................................................................... -
Recompilez la classe
AfficherHeure
avec cette option. Quelles sont les méthodes dépréciées utilisées dansAfficherHeure
? Dans quelle classe sont elles définies ? Que dit la documentation javadoc à leur sujet ?
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
..............................................................................................................................
2.4 : Utilisation de classes d'autres packages
-
Dans le programme précédent (
AfficherHeure
) commentez la première ligne//import java.util.Date; public class AfficherHeure { public static void main(String[] args) { Date d = new Date(); System.out.print("il est " + d.getHours() + " h "); System.out.print(d.getMinutes()+ " m "); System.out.println(d.getSeconds() + " s"); } }
-
Recompiler cette classe ? Que constatez-vous ?
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................. -
Dans l'exercice précédent (2.3) vous avez pu constater que plusieurs des méthodes de la classe
Date
sont dépréciées. Pour remédier à ce problème, la javadoc de cette classe vous recommande d'utiliser un objetCalendar
du packagejava.util
.Pour ne plus avoir de message de dépréciation, modifiez le code de
AfficherHeure
en utilisant non plus un objetDate
mais un objetGregorianCalendar
. Pour cela, remplacezDate d = new Date();
parCalendar cal = new GregorianCalendar();
et les messages
d.getHours();
,d.getMinutes();
,d.getHours();
par
cal.get(Calendar.HOUR_OF_DAY);
,cal.get(Calendar.MINUTE);
etcal.get(Calendar.SECOND);
comme le précise la documentation des méthodes dépréciées.Recompiliez. Verifiez qu'il n'y a plus de message de dépréciation et que l'exécution donne bien le résultat attendu.
Exercice 3 : Compilation, exécution, documentation d'une application simple
Lorsque l'on développe une application constituée de plusieurs fichiers il est important de bien organiser ceux-ci sur son espace disque. Ainsi, une organisation classique est de séparer dans différents répertoires les fichiers selon leur nature. Ainsi pour un projet de développement en JAVA on pourra choisir l'organisation suivante : dans un répertoire correspondant au projet définir 3 sous repertoires :
-
un répertoire src (sources) contenant les strong source des classes JAVA
-
un répertoire classes contenant le strong compilé (byte-code) des classes JAVA
-
un répertoire docs contenant la documentation des différentes classes JAVA
Dans l'exercice qui suit, vous allez expérimenter cette organisation avec une application qui permet l'animation de visages sur l'écran. Cette application est constituée de 3 classes Java :
VisageRond qui décrit des objets modélisant un Visage animé.
Dessin qui décrit l'objet chargé de la gestion et l'affichage des différents objets Visages qu'il contient
AppliVisage1 le programe principal qui crée les Visages, les place dans la zone de dessin et lance l'animation.
a) compilation de l'application
-
Dans votre répertoire de travil (PLAI/Java/TP01)Créez un repertoire Visages avec trois sous répertoires src , docs et classes
Sauvegardez dans le répertoire src les fichiers sources des différentes classes de l'application : VisageRond.java , Dessin.java et AppliVisage1.java
-
Placez vous dans le répertoire src (commande cd) et compilez l'application AppliVisage1 en utilisant la commande
javac -d ../classes AppliVisage1.javaQuel est le rôle de l'option -d utilisée dans la commande javac ?
......................................................................................................Quel aurait été l'effet de la commande javac AppliVisage1.java ?
......................................................................................................Quels ont été les fichiers créés par la commande de compilation de la classe AppliVisage1 ?
......................................................................................................Qu'en déduisez-vous ?
.......................................................................................................
.......................................................................................................
.......................................................................................................
b) exécution de l'application
-
Placez-vous dans le répertoire classes (commande cd) et exécutez l'application AppliVisage1. Pour arrêter l'application, cliquez dans la case de fermeture de la fenêtre de l'application ou tappez CTRL C sur la ligne de commandes.
-
Quelle est la commande utilisée pour lancer cette exécution ?
.............................................................
-
-
Placez vous maintenant dans le répertoire Visages et retapez la commande utilisée précédemment pour l'exécution de l'application AppliVisage1.
-
Quel message est affiché ?
..................................................................... -
Que signifie-t'il ?
.....................................................................
-
-
L'option -classpath (ou -cp) de la commande java permet d'indiquer à l'interpréteur Java où trouver les classes à charger.
En utilisant cette option quelle est la commande à utiliser pour lancer l'application depuis le répertoire Visages ?
.....................................................................................................
-
Déplacez le fichier AppliVisage1.class du répertoire classes vers le répertoire Visages.
-
Toujours en restant positionné dans le répertoire Visages essayez d'éxecuter l'application AppliVisage1 par la commande java AppliVisage1.
Que constatez-vous ?
..........................................................................................................
Quelle explication pouvez-vous donner ?
............................................................................................................ -
Essayez ensuite d'éxecuter l'application AppliVisage1 par la commande utilisée à la question 3 de cet exercice. Que constatez vous à nouveau ? Qu'en déduisez vous ?
............................................................................................................. -
Quelle valeur faut-il donner à l'option -classpath pour pouvoir lancer correctement l'exécution depuis le répertoire Visages (avec dans ce repertoire le fichier AppliVisage1.class, et les fichiers Dessin.class et VisageRond.class situés dans le répertoire classes) ?
.......................................................................................
-
c) construction et utilisation de fichiers jar
-
Replacez vous dans le répertoire classes. Normalement si vous avez respecté les étapes précédentes, ce répertoire ne doit contenir plus que les fichiers Dessin.class et VisageRond.class , fichiers contenant le byte-code des classes Dessin et VisageRond.
-
Construisez dans le répertoire classes un fichier JAR (Java Archive) de nom visages.jar contenant ces deux fichiers.
Quelle est la commande à utiliser ?
.............................................................................................-
Si vous ne l'avez pas fait, ajoutez l'option v à la commande utilisée ? Quel est son rôle ?
............................................................................................
-
Que fait la commande jar tvf appliquée au fichier jar que vous venez de créer ?
..................................................................................................... -
Déplacez le fichier jar dans le répertoire Visages.
-
Replacez vous dans le répertoire Visages et lancez à nouveau l'exécution en utilisant ce fichier jar dans l'option -classpath de la commande java.
Quelle est la commande à utiliser pour lancer cette exécution ?
..............................................................................................
-
D'après vous quel est l'interêt des fichiers jars ? (Des éléments de réponse sont dans la documentation de la commande jar)
..........................................................................................................................
..........................................................................................................................
..........................................................................................................................
d) génération automatique de la documentation
Pour comprendre le fonctionnement et le rôle des différentes classes de l'application Visages vous allez générer la documentation de celles-ci à l'aide de l'outil javadoc.
-
Si il n'existe pas encore, créez un répertoire docs dans le répertoire Visages
-
Placez vous dans le répertoire src et lancez la commande javadoc -d ../docs *.java.
-
Quels fichiers cette commande a-t-elle créés (et où se trouvent-ils) ?
............................................................................................
............................................................................................
-
-
Le point d'entrée de la documentation générée est le fichier index.html.
-
Ouvrez ce fichier depuis votre navigateur et parcourez cette documentation.
-
La documentation de la classe VisageRond référence un image que vous trouverez ici : figurevisage.gif. Pour que la documentation soit complète recopiez cette image dans le répertoire docs.
-
En comparant la documentation générée et le strong source des différents classes Java, pouvez-vous déduire quels ont été les élements des fichiers sources ayant permis de produire cette documentation ?
............................................................................................
............................................................................................
-
-
Les méthodes setDy et getDy de la classe VisageRond ne sont pas documentées.
-
Modifiez le source de la classe VisageRond afin de documenter ces méthodes.
-
Regénérez la documentation.
Vérifiez que vos modifications ont correctement été prises en compte.
-
e) Modification d'une classe de l'application
-
Modifiez le source de classe VisageRond afin que la taille par défaut d'un visage soit de 100x100 pixels au lieu de 50x50 pixels
-
Recompilez cette classe (en prenant bien soin de placer le fichier bytestrong dans le répertoire classes).
-
Quelle commande avez vous utilisée ?
................................................................................ -
Quelles ont été les classes recompilées ?
................................................................................
-
-
Vérifiez que votre modification fonctionne en réexécutant l'application AppliVisage1.
Quelle commande avez vous utilisée pour cette exécution ?
.......................................................................................
pour en savoir plus sur la création et manipulation d'objets en Java : Création, Référencement d'objets et envoi des messages
f) Erreurs de compilation
-
Sauvegardez dans le répertoire
src
le fichier :AppliVisage2.java
-
Placez vous dans le répertoire
src
et compilezAppliVisage2
avec la commandejavac -classpath ../classes -d ../classes AppliVisage2.java
.-
Quels sont les erreurs de compilation et les corrections que vous proposez ?
.........................................................................................................
.........................................................................................................
.........................................................................................................
.........................................................................................................
.........................................................................................................
.........................................................................................................
-
-
Après avoir effectué ces modifications, recompilez et exécutez l'application
AppliVisage2
.
g) Erreurs d'exécution
-
Sauvegardez dans le répertoire
src
le fichier :AppliVisage3.java
-
Placez vous dans le répertoire
src
et compilezAppliVisage3
avec la commandejavac -classpath ../classes -d ../classes AppliVisage3.java
-
Exécutez l'application
AppliVisage3.
Que se passe-til ?
..........................................................................................
A l'aide du message d'erreur produit, localisez et corrigez l'erreur. Quelle correction avez vous effectuée ?
.....................................................................................................................
.....................................................................................................................
.....................................................................................................................Recompilez et réexecutez cette application.