:: Enseignements :: ESIPE :: E3INFO :: 2015-2016 :: Programmation Objet avec Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
String, StringBuilder, égalité [en autonomie]
|
Exercice 1 - Egalité, Redéfinition, Polymorphisme, Liaison tardive (late binding).
-
Qu'affiche le code suivant :
String s1="toto";
String s2=s1;
String s3=new String(s1);
System.out.println(s1==s2);
System.out.println(s1==s3);
Expliquer
-
Quelle est la méthode à utiliser pour
tester le contenu des chaînes de caractères ?
-
Qu'affiche le code suivant :
String s1="toto";
String s2="toto";
System.out.println(s1==s2);
Expliquer.
-
Expliquer pourquoi il est important que java.lang.String
soit non mutable.
-
Qu'affiche le code suivant :
String s="hello";
s.toUpperCase();
System.out.println(s);
Expliquer.
Exercice 2 - En morse. Stop.
Ecrire une classe
fr.umlv.morse.Morse qui permet lors de
son exécution d'afficher les chaînes de caractères
passées en argument séparées par des
"Stop.".
$ java Morse ceci est drole
ceci Stop. est Stop. drole Stop.
-
Utiliser dans un premier temps,
l'opérateur + qui permet la concaténation
de chaînes de caractères.
-
A quoi sert un objet de la classe java.lang.StringBuilder
Pouquoi sa méthode append(String) renvoie un objet de
type StringBuilder ?
-
Ré-écire la classe fr.umlv.morse.Morse en utilisant
un StringBuilder.
Quel est l'avantage par rapport à la solution précédente ?
-
Recopier le code suivant dans une classe de Test :
public static void main(String[] args) {
if(args.length < 3) {
System.out.println("At least 3 arguments expected on command line");
return;
}
String first=args[0];
String second=args[1];
String last=args[2];
System.out.println(first+' '+second+' '+last);
}
Indication: pour exécuter une classe en lui passant des arguments
sur la ligne de commande, il y a deux manières de faire:
- soit on spécifie les arguments de la ligne de commande depuis eclipse.
Menu Run -> Run configurations... et ensuite dans l'onglet "Arguments"
- soit on exécute depuis un terminal, et pour cela on doit être dans répertoire
"bin" ou "classes" du projet, à la racine de l'arborescence de package, et spécifier
le nom de classe complet (i.e. préfixé par son package d'appartenance).
Un utilisant cette deuxième technique, utiliser la commande javap
pour afficher le bytecode généré
javap -c Test
Que pouvez vous en déduire ?
Dans quel cas doit-on utiliser StringBuilder.append()
plutôt que le + ?
Exercice 3 - Redéfinition
-
Quelles sont les valeurs affichées par le main de la classe Test ?
Expliquer pourquoi.
-
En se plaçant dans B, à combien de méthodes x une méthode de
B a t-elle accès ?
S'il y en a plusieurs, donner pour chacune un moyen d'accès.
-
Mêmes questions, mais en se plaçant dans Test.
-
Modifier les méthodes x() de A et de B pour qu'elles soient
static. Qu'est ce que cela change aux réponses des deux questions précédentes?
Que penser des warnings indiqués à la compilation?
-
Modifier maintenant le code des classes pour que les x dans A et
B ne soient plus des méthodes mais des champs (valant toujours respectivement
3 et 4). Qu'est ce que cela change aux réponses des questions précédentes?
Exercice 4 - Surcharge, redéfinition, appel de méthode
Dans les exemples de classes suivantes, et si possible sans l'aide d'eclipse ni du compilateur,
au moins dans un premier temps :
-
Dire où se trouvent les erreurs de compilation.
-
Expliquer ces erreurs.
-
Retirer les méthodes qui provoquent ces erreurs.
-
Indiquer où se trouvent les surcharges et les redéfinitions.
-
Indiquer les méthodes appellées.
© Université de Marne-la-Vallée