On voit ici comment afficher une chaîne de caractères en java.
On peut voir comment faire la même chose dans d'autres langages sur cette page.
On peut voir comment faire la même chose dans d'autres langages sur cette page.
Hello World 1
(voir HelloWorld1.java)Créer un répertoire
HelloWorld
et dedans créer un fichier HelloWorld1.java
.
Copier le code suivant dans
HelloWorld1.java
:
/** Premier exemple **/ class HelloWorld1{ /** Point d'entrée du programme @param args Tableau de chaînes passé au programme **/ public static void main(String[] args) { System.out.println("Hello World!"); // Affiche une chaîne de caractères } }Compiler le programme :
javac HelloWorld1.javaOn voit que ça a généré un fichier
HelloWorld1.class
Exécuter le programme :
java HelloWorld1Notes :
-
Il n'y a pas de directive
package
; on se trouve donc dans le package par défaut. -
La déclaration de
HelloWorld1
ne contient pas le mot-cléextends
, elle dérive donc dejava.lang.Object
. - Notre classe contient une seule méthode statique, on n'a pour l'instant pas instancié d'objet.
-
On va voir plus loin que la méthode
main()
est particulière. -
La ligne qui affiche "Hello World" utilise la classe
System
.
On n'a pas importé cette classe, c'est donc une classe du packagejava.lang
.
En allant voir la doc d'Oracle, on peut voir que cette classe a une variable statique,out
.out
est de typejava.io.PrintStream
, qui contient plusieurs méthodesprintln()
. Une de ces méthodes a la signaturepublic void println(String x)
; c'est elle qui est utilisée.
La fonction main()
la méthodemain()
est particulière car elle fournit un point d'entrée à l'interpréteur java
.
Lorsqu'on exécute du code java, l'interpéteur va chercher un méthode dont la signature est exactement :
public static void main(String[] args)Une classe donnée ne peut avoir qu'une seule fonction
main()
avec cette signature précise.
Mais deux classes peuvent avoir chacune leur fonction
main()
, ce qui permet d'avoir plusieurs points d'entrée dans une application.
Le paramètre
args
est un tableau contenant des éléments de type String
.
On accède aux éléments de ce tableau par
args[0]
, args[1]
etc.
Hello World 2
(voir HelloWorld2.java)On déporte l'affichage dans une méthode statique :
class HelloWorld2 { public static void main(String[] args) { echo(); } public static void echo() { System.out.println("Hello World!"); } }Notes :
-
Syntaxe de l'appel d'une méthode statique de la même classe.
A la place deecho();
on aurait aussi pu écrireHelloWorld2.echo();
Hello World 3
(voir HelloWorld3.java)On passe le message à afficher en paramètre au programme :
class HelloWorld3 { public static void main(String[] args) { echo(args[0]); } public static void echo(String msg) { System.out.println(msg); } }Pour appeler le programme :
java HelloWorld3 "Mon message"Notes :
-
On n'a pas géré les erreurs possibles : appel sans paramètre ou avec plusieurs paramètres.
Générez une erreur en appelant la fonction sans paramètre :java HelloWorld3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at HelloWorld3.main(HelloWorld3.java:4)
L'interpréteur java essaye d'accéder au premier élément du tableauargs
mais le tableau est vide.
Une exception est lancée, de typeArrayIndexOutOfBoundsException
.
Hello World 4
(voir HelloWorld4.java)On déporte l'affichage dans une autre classe :
Le fichier
HelloWorld4.java
contient
class HelloWorld4 { public static void main(String[] args) { Afficheur.afficher(args[0]); } } class Afficheur{ public static void afficher(String msg) { System.out.println(msg); } }Pour compiler :
javac HelloWorld4.javaPour compiler la classe
HelloWorld4
, le compilateur voit qu'il doit aussi compiler la classe Afficheur
et génère HelloWorld4.class
et Afficheur.class
.
Notes :
- On n'a toujours pas instancié d'objet.
- Syntaxe de l'appel d'une méthode statique d'une autre classe :
NomdelaClasse.nomDeLeMéthode(paramètres)
-
On a mis les classes
HelloWorld4
etAfficheur
dans le même fichier. C'est possible mais déconseillé.
Hello World 5
(voir hello5)On va créer une instance de
Afficheur
.
Créez un répertoire
hello5
avec 2 fichiers :
HelloWorld5.java
class HelloWorld5 { public static void main(String[] args) { Afficheur a = new Afficheur(args[0]); a.afficher(); } }
Afficheur.java
class Afficheur{ /** Le message à afficher **/ private String msg; public Afficheur(String msg){ this.msg = msg; } public void afficher(){ System.out.println(msg); } }Pour compiler :
javac HelloWorld5.javaNotes :
- Création d'une instance avec le mot-clé
new
. -
Appel d'une méthode d'instance
unObjet.nomDeLaMéthode(paramètres)
-
Dans le constructeur
Afficheur(String msg)
, on utilise le mot-cléthis
pour référer à l'instance courante.
C'est ici obligatoire car le paramètremsg
et la variable d'instancemsg
ont le même nom.
Avec des noms différents, on n'aurait pas été obligés d'utiliserthis
:public Afficheur(String message){ msg = message; }
-
Dans
afficher()
, on se réfère à la variable d'instance par son nom,msg
sans avoir besoin d'utiliserthis
.
Mais on aurait pu aussi écrire explicitement :System.out.println(this.msg);