Dans cette séance nous allons découvrir comment compiler et exécuter un fichier de code Java, et effectuer des manipulations basiques sur les objets. Tout d'abord veuillez recopier le code source suivant dans un fichier nommé Main.java
. Placez ce fichier dans un répertoire vide créé pour l'occasion (exemple: pg220/m1
).
// Définition de classe, obligatoire dans chaque fichier Java.
// Le nom de la classe doit être égal au nom du fichier.
class Main {
// Point d'entrée des programmes Java. Le tableau de String args correspond
// aux paramètres par la ligne de commande.
public static void main(String[] args) {
//Déclaration d'un objet s de type String.
String s;
// Création de l'objet s (abordé dans la prochaine séance).
s = new String("Hello World!");
// Affichage de l'objet s.
System.out.println(s);
}
}
Pour compiler ce fichier il faut faire appel au compilateur Java : javac
. Vous pouvez compiler le fichier avec la commande suivante : javac Main.java
. Si tout se passe bien, vous devriez obtenir un fichier nommé Main.class
. Il contient le code source précédent sous forme de bytecode. Pour lancer le fichier, il faut cette fois passer par l'intermédiaire de la machine virtuelle Java, avec la commande suivante java Main
. Normalement, l'exécution du programme devrait afficher la chaîne Hello World!
sur votre console.
Cherchez dans la javadoc de la classe String
la méthode qui permet de mettre une chaîne en majuscules. Comment fonctionne cette méthode? Modifiez le programme précédent pour construire une chaîne en majuscule à partir de s
. De la même manière, trouvez les méthodes qui permettent de:
Testez toutes ces méthodes. Les méthodes qui renvoient des String
modifient elles l'objet sur lequel on les appelle ou travaillent elles sur des copies?
toUpperCase()
toLowerCase()
substring(int)
et substring(int, int)
startsWith(String)
et startsWith(String, int)
length()
concat(String)
Les méthodes qui renvoient des String
travaillent en général sur des copies comme le montre le code suivant :
String s1 = new String("test");
String s2 = s1.toUpperCase();
System.out.println(s1);
System.out.println(s2);
Comme nous l'avons vu, toutes les variables en Java ne sont pas forcément des objets, elles peuvent aussi être des valeurs primitives (comme int
ou boolean
). L'opérateur ==
permet de tester si :
Testez le code suivant:
int i1 = 12;
int i2 = 12;
System.out.println(i1 == i2);
Que se passe t'il?
Le programme affiche true
car les deux variables sont de type primitif et qu'elles ont la même valeur.
Testez cette fois l'opérateur ==
avec deux valeurs qui ne sont pas primitives, comme dans le code suivant.
String s1 = new String("test");
String s2 = new String("test");
System.out.println(s1 == s2);
Que se passe t'il? Est-ce que cela vous paraît normal? Trouvez la méthode qui permet de savoir si les deux chaînes sont égales.
Le programme affiche d'abord false
car les deux variables sont des objets et ils n'ont pas la même identité. La méthode equals()
permet de savoir si les deux chaînes sont égales comme le montre le code suivant:
String s1 = new String("test");
String s2 = new String("test");
System.out.println(s1.equals(s2));
Essayez maintenant de faire une classe class Point
qui comporte deux attributs int x
et int y
, ainsi qu'un constructeur et des accesseurs/mutateurs pour tous les attributs. Ajouter dans cette classe un point d'entrée qui crée un point et affiche ses coordonnées.
class Point {
int x;
int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
int getX() { return x; }
void setX(int x) { this.x = x; }
int getY() { return y; }
void setY(int y) { this.y = y; }
public static void main(String[] args) {
Point p = new Point(5, 5);
System.out.println(p.getX());
System.out.println(p.getY());
}
}
Au fait maintenant que vous maitrisez les classes et les objets, à votre avis, quels types d'éléments Java sont out
et println
dans System.out.println()
System
est une classe. De ce fait out
est un attribut statique et println()
une méthode normale de la classe de out
(en l'occurence PrintStream
).
Personal website by Jean-Rémy Falleri is licensed under CC BY-NC-SA 4.0