MIM1
TD 1 de POOGL
Vincent BOUDET
Bureau 343 (84-70)
email vboudet@ens-lyon.fr
23 Janvier 2000
L'objectif de ce premier TD est de se familiariser avec
l'environnement de travail ainsi qu'avec les differents
outils constituant le JDK.
A Environnement de travail
L'environnement de travail pour les séances de TD sera le suivant :
-
JDK 1.2 de Sun (http://www.javasoft.com/products/jdk/1.2/index.html )
- un éditeur de texte (emacs ou xemacs de préférence qui incluent depuis la version 19.14 un mode java)
- un shell pour le travail en dehors de son editeur
- un browser pour consulter la documentation
-
sur les API (http://java.sun.com/products/jdk/1.2/docs/api/index.html pour la dernière mise à jour)
- sur les outils Java fournis par Sun (http://java.sun.com/products/jdk/1.2/docs/tooldocs/tools.html pour la dernière mise à jour)
- au tutoriel de Sun (http://java.sun.com/docs/books/tutorial)
Si vous travaillez chez vous, vous pouvez travailler sous un environnement
semblable sous Linux, Windows, ou tout autre OS.
Il est possible que par defaut vous n'avez pas acces aux outils Sun.
Si c'est le cas, modifier votre variable PATH pour y inclure /usr/local/jdk1.2/bin.
B Utiliser l'aide en ligne
Allez voir à l'adresse http://java.sun.com/products/jdk/1.2/docs/api/,
pour consulter l'aide en ligne. La fenêtre est découpée en trois frames.
En haut à gauche se trouve les ``packages''. En bas à gauche se trouvent les
classes contenues dans le package. Si vous cliquez sur une de ces classes, les
membres, les méthodes ainsi que leur description s'affichent dans la
fenêtre de droite.
Question B.1
Trouvez la classe Applet. De quelle classe hérite-telle directement ?
Question B.2
Trouvez la classe qui représente les entiers. Quelles sont ses membres ?
Question B.3
Trouvez la classe qui permet de dessiner un rectangle dans la fenêtre d'une applet.
C Premier exercice
But : toucher à toute la chaîne de développement d'un programme Java, étudier grossièrement la structure d'un programme très simple.
Objet : écrire l'incontournable ``Hello World!'', sous forme d'application, mais aussi d'applet.
Question C.1
Recopiez ces quelques lignes dans un éditeur. Nommez le fichier HelloWorld.java.
public class HelloWorld {
public static void main(String argv[]) {
System.out.println(``Hello World\n'');
}
}
La compilation se fait avec la commande : javac hello.java. En sortie,
cela donne un fichier HelloWord.class.
L'exécution se lance avec la commande : java HelloWorld.
Question C.2
Recopiez ces quelques lignes dans un éditeur. Nommez le fichier helloapp.java.
import java.applet.*;
import java.awt.*;
public class HelloWorldApp extends Applet
{
public void paint(Graphics g)
{
g.drawString(``Hello world!'', 50, 25);
}
}
Compilez le programme avec : javac helloapp.java : ca ne marche pas !
Question C.3
Lisez le message d'erreur et remédiez à cette erreur.
De même, si vous essayez d'exécuter l'applet en tapant : java HelloWorldApp,
ca ne marche pas. Pour lancer l'applet, il faut utiliser appletviewer sur
un code html !
Question C.4
Recopiez ces quelques lignes dans un éditeur. Nommez le fichier helloapp.html.
<HTML>
<HEAD>
<TITLE>Applet Hello World </TITLE>
</HEAD>
<BODY>
<APPLET CODE=''HelloWorldApp.class'' WIDTH=200 HEIGHT=50>
</APPLET>
</BODY>
</HTML>
Lancez la commande : appletviewer helloapp.html.
Remarques :
-
Le fichier dans lequel se trouve une classe doit avoir le même nom que la
classe.
- Une applet n'a pas de fonction main.
- Elle doit donc avoir au moins une méthode pour démarrer. Ce peut être
init, start, paint.
- Lors du lancement de l'applet, un contexte graphique est défini. Dans
l'exemple, ce contexte est appelé g et est passé en paramètre à la
méthode paint.
- La méthode drawString est une méthode de la classe java.awt.Graphics. Pour que le compilateur trouve cette classe, il faut lui indiquer un chemin : import java.awt.*;.
- Une méthode fait toujours partie d'une classe et ne peut être appelée que par un objet de cette classe.
Question C.5
Essayez d'enlevez le g. devant drawString pour voir le résultat.
D Deuxième exercice
But : Se familiariser avec les outils de documentation de Java.
Objet : utiliser javadoc pour créer automatiquement la documentation de votre code.
En utilisant les commentaires d'unn programme, on peut générer directement la
documentation de ce programme avec l' utilitaire javadoc.
Chaque classe, chaque champ et chaque méthode sont précédés dún commentaire
de documentation délimité par /** et */ qui apparaît dans le fichier html. Dans líndex seule la première ligne de commentaire est présentée.
L' option -private est nécessaire si on veut voir les commentaires
relatifs aux classes non publiques ainsi qu' aux champs et méthodes non publiques. La documentation standard Java est réalisé sans cette option ni celles qui suivent. L' option -author affiche le nom donné après le paramètre @author et l' option -version affiche le numéro de version donné après
@version.
Certains mots-clés sont précédés du caractère @, afin de donner
à l' utilisateur certaines précisions:
-
author : nom de l' auteur,
- version : numéro de version,
- param : nom de l' argument suivi d' un commentaire,
- return : commentaire sur la valeur retournée,
- see : nom d' une classe à consulter.
Question D.1
Écire un programme qui souhaite la bienvenue à la personne
dont le nom est passé en argument.
Question D.2
Réaliser la documentation la plus complète possible de ce programme avec javadoc.
E Types de variables
La plupart des types sont identiques à ceux du C : byte, short,
int, long, float, double, char, boolean. Cependant, ces types sont
également utilisables sous forme de classes : Byte, Short,
Integer, Long, Float, Double, Character, Boolean.
L'instanciation d'une variable se fait comme en C.
Question E.1
Tapez le programme suivant Variable.java :
public class Variable
{
public static void main(String[] args)
{
byte b = 5;
short s = -107;
int i = 15463;
long l = -1765424554;
float f = -1.4523f;
double d = 0.314159e+01;
char c = 'C';
System.out.println(b+'',''+s+'',''+i+'',''+l+
'',''+f+'',''+d+'',''+c);
}
}
Compilez avec javac Variable.java et exécutez avec java Variable.
Question E.2
Remplacez la dernière ligne par System.out.println(i +
c);. Recompilez. Observez bien le résultat. Conclusion ?
Question E.3
Modifiez le programme comme suivant :
public class Variable
{
public static void main(String[] args)
{
int i = 15463;
double d = 0.314159e+01;
char c = 'C';
Integer ii = new Integer(i);
Double dd = new Double(d);
Character cc = new Character(c);
System.out.println(ii+'',''+dd+'',''+cc);
System.out.println(ii.doubleValue()+'',''+dd.intValue()+'',''+
Character.toLowerCase(c));
System.out.println(ii.TYPE+'',''+dd.MAX_VALUE+'',''+cc.MIN_VALUE);
}
}
Comparez bien la sortie écran des différentes lignes. Par analogie
avec le C, la deuxième affiche des valeurs ``castées''.
Remarques:
-
new permet de créer une instance d'une classe. Dans cet exercice, on crée donc trois objets : ii, dd, cc.
- La classe Integer a trois membres constantes et de nombreuses méthodes qui permettent entre autres de convertir d'un type vers un autre, de manipuler les caractères, de comparer...
- la méthode println peut s'appliquer sur un objet Integer, Double... Dans ce cas, elle affiche la valeur de l'int ou double correspondant.
Il est possible d'obtenir le même résultat avec les variables i
et d avec un cast type C:
System.out.println((double)i+'',''+(int)d);
Question E.4
Essayez maintenant avec cette ligne :
System.out.println((double)ii+'',''+(int)dd);
La compilation ne marche pas : il n'est pas possible de ``caster'' un Integer en int. De même, la ligne suivante conduit à une erreur de compilation :
System.out.println(i.doubleValue()+'',''+d.intValue());
Les variables i et d ne sont pas des objets donc n'ont pas de méthodes associées!
F Écrire un double avec un nombre limité de décimales
Il s'agit de définir une méthode permettant d'écrire un double avec un nombre limité de décimales.
Pour cela, on définira une classe contenant une méthode statique, la méthode tronque, ayant deux paramètres : un double x et un entier nbDecimales. La méthode devra retourner une chaîne de caractères donnant le double x éventuellement tronqué de façon à avoir au plus nbDecimales décimales. On ne cherchera pas à "arrondir au plus proche", on enlèvera simplement les décimales excédentaires, que x soit positif ou négatif.
La valeur de x et celle de nbDecimales seront transmis par la ligne de commande.
Voici quelques exemples d'exécution.
java EcritDouble 98.7689 2
98.76
java EcritDouble -0.765 1
-0.7
java EcritDouble -0.765 0
0
java EcritDouble -4.765 0
-4
java EcritDouble 4.765 -1
4
Les méthode suivantes de la classe String pourraient vous servir :
-
charAt(int i) retourne le caractère de la chaîne concernée se trouvant en position i, la premier caractère de la chaîne étant considéré comme en position 0.
- substring(int debut, int fin) : retourne la sous-chaîne constituée des caractères qui se trouvent de la position debut jusqu' à la position fin-1 incluse (i.e. fin excluse).
Vous pouvez aussi regarder la classe StringTokenizer.
This document was translated from LATEX by
HEVEA.