Débuter avec le langage Java

Création de votre premier programme Java

Créez un nouveau fichier dans votre [éditeur de texte][1] ou [IDE][2] nommé HelloWorld.java. Collez ensuite ce bloc de code dans le fichier et enregistrez :

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

Exécuter en direct sur Ideone

Remarque : Pour que Java reconnaisse cela comme une “classe publique” (et ne génère pas d’[erreur de compilation][3]), le nom de fichier doit être le même que le nom de la classe (‘HelloWorld’ dans ce exemple) avec une extension .java. Il devrait également y avoir un modificateur d’accès “public” avant.

[Conventions de dénomination][4] recommandent que les classes Java commencent par un caractère majuscule et soient au format camel case (dans lequel la première lettre de chaque mot est en majuscule). Les conventions déconseillent les traits de soulignement (_) et les signes dollar ($).

Pour compiler, ouvrez une fenêtre de terminal et accédez au répertoire de HelloWorld.java :

cd /path/to/containing/folder/

Remarque : cd est la commande de terminal pour changer de répertoire.

Entrez javac suivi du nom de fichier et de l’extension comme suit :

$ javac HelloWorld.java

Il est assez courant d’obtenir l’erreur ' javac '' n'est pas reconnu comme une commande interne ou externe, un programme exécutable ou un fichier de commandes. Même lorsque vous avez installé le JDK et que vous pouvez exécuter le programme à partir de IDE ex. eclipse etc. Puisque le chemin n’est pas ajouté à l’environnement par défaut.

Si vous obtenez ceci sur Windows, pour résoudre, essayez d’abord de naviguer jusqu’à votre chemin javac.exe, il se trouve très probablement dans votre C:\Program Files\Java\jdk(version number)\bin. Ensuite, essayez de l’exécuter avec ci-dessous.

$ C:\Program Files\Java\jdk(version number)\bin\javac HelloWorld.java

Auparavant, lorsque nous appelions javac, c’était la même chose que la commande ci-dessus. Seulement dans ce cas, votre OS savait où résidait javac. Alors disons-le maintenant, de cette façon, vous n’avez pas à taper tout le chemin à chaque fois. Nous aurions besoin d’ajouter ceci à notre PATH

Pour modifier la variable d’environnement PATH sous Windows XP/Vista/7/8/10 :

  • Panneau de configuration ⇒ Système ⇒ Paramètres système avancés
  • Passez à l’onglet “Avancé” ⇒ Variables d’environnement
  • Dans “System Variables”, faites défiler vers le bas pour sélectionner “PATH” ⇒ Edit

Vous ne pouvez pas annuler cela alors soyez prudent. Copiez d’abord votre chemin existant dans le bloc-notes. Ensuite, pour obtenir le PATH exact vers votre javac, accédez manuellement au dossier où réside javac et cliquez sur la barre d’adresse, puis copiez-le. Il devrait ressembler à quelque chose comme c:\Program Files\Java\jdk1.8.0_xx\bin

Dans le champ “Valeur variable”, collez ce DEVANT de tous les répertoires existants, suivi d’un point-virgule (;). NE PAS SUPPRIMER les entrées existantes.

Variable name  : PATH
Variable value : c:\Program Files\Java\jdk1.8.0_xx\bin;[Existing Entries...]

Maintenant, cela devrait résoudre.

Pour les systèmes basés sur Linux [essayez ici][10].

Remarque : La commande [javac][5] invoque le compilateur Java.

Le compilateur générera alors un fichier bytecode appelé HelloWorld.class qui peut être exécuté dans la [Java Virtual Machine (JVM)][6]. Le compilateur du langage de programmation Java, javac, lit les fichiers source écrits dans le langage de programmation Java et les compile dans des fichiers de classe bytecode. En option, le compilateur peut également traiter les annotations trouvées dans les fichiers source et de classe à l’aide de l’API de traitement des annotations “Pluggable”. Le compilateur est un outil de ligne de commande mais peut également être appelé à l’aide de l’API du compilateur Java.

Pour exécuter votre programme, entrez java suivi du nom de la classe qui contient la méthode main (HelloWorld dans notre exemple). Notez comment le .class est omis :

$ java HelloWorld

Remarque : La commande [java][7] exécute une application Java.

Cela affichera sur votre console :

Bonjour, Monde !

Vous avez réussi à coder et à construire votre tout premier programme Java !

Remarque : Pour que les commandes Java (java, javac, etc.) soient reconnues, vous devez vous assurer que :

  • Un JDK est installé (par exemple [Oracle][8], [OpenJDK][9] et d’autres sources)
  • Vos variables d’environnement sont correctement [configurées][10]

Vous devrez utiliser un compilateur (javac) et un exécuteur (java) fournis par votre JVM. Pour savoir quelles versions vous avez installées, entrez java -version et javac -version sur la ligne de commande. Le numéro de version de votre programme sera imprimé dans le terminal (par exemple 1.8.0_73).


Zoom sur le programme Hello World

Le programme “Hello World” contient un seul fichier, qui se compose d’une définition de classe HelloWorld, d’une méthode main et d’une instruction à l’intérieur de la méthode main.

public class HelloWorld {

Le mot clé class commence la définition de classe pour une classe nommée HelloWorld. Chaque application Java contient au moins une définition de classe ([Plus d’informations sur les classes][11]).

    public static void main(String[] args)  {

Il s’agit d’une méthode de point d’entrée (définie par son nom et sa signature public static void main(String[])) à partir de laquelle la JVM peut exécuter votre programme. Chaque programme Java devrait en avoir un. Il est:

  • public : ce qui signifie que la méthode peut être appelée de n’importe où, c’est-à-dire de l’extérieur du programme également. Voir [Visibilité][12] pour plus d’informations à ce sujet.
  • statique : cela signifie qu’il existe et peut être exécuté par lui-même (au niveau de la classe sans créer d’objet).
  • void : cela signifie qu’il ne renvoie aucune valeur. Remarque : Ceci est différent de C et C++ où un code de retour tel que int est attendu (la manière de Java est [System.exit()][13]).

Cette méthode principale accepte :

  • Un [tableau][14] (généralement appelé args) de Strings passés en tant qu’arguments à la fonction principale (par exemple à partir de [arguments de ligne de commande][15]).

Presque tout cela est requis pour une méthode de point d’entrée Java.

Pièces non nécessaires :

  • Le nom args est un nom de variable, il peut donc être appelé comme vous voulez, bien qu’il soit généralement appelé args.
  • Que son type de paramètre soit un tableau (String[] args) ou [Varargs][varargs-documentation] (String... args) n’a pas d’importance car les tableaux peuvent être passés dans varargs.

Remarque : Une même application peut avoir plusieurs classes contenant une méthode de point d’entrée (“main”). Le point d’entrée de l’application est déterminé par le nom de classe passé en argument à la commande java.

À l’intérieur de la méthode principale, nous voyons l’instruction suivante :

        System.out.println("Hello, World!");

Décomposons cette déclaration élément par élément :

Élément Objectif
Système cela indique que l’expression suivante appellera la classe System, du package java.lang.
. c’est un “opérateur point”. Les opérateurs point vous permettent d’accéder aux membres d’une classe1 ; c’est-à-dire ses champs (variables) et ses méthodes. Dans ce cas, cet opérateur point vous permet de référencer le champ statique “out” dans la classe “System”.
sortir c’est le nom du champ statique de type PrintStream dans la classe System contenant la fonctionnalité de sortie standard.
. c’est un autre opérateur point. Cet opérateur point donne accès à la méthode println dans la variable out.
println c’est le nom d’une méthode dans la classe PrintStream. Cette méthode imprime notamment le contenu des paramètres dans la console et insère une nouvelle ligne après.
( cette parenthèse indique qu’une méthode est en cours d’accès (et non un champ) et commence à transmettre les paramètres à la méthode println.
"Bonjour, le monde!" c’est le littéral [String][16] qui est passé en paramètre, dans la méthode println. Les guillemets doubles à chaque extrémité délimitent le texte sous forme de chaîne.
) cette parenthèse signifie la fermeture des paramètres passés dans la méthode println.
; ce point-virgule marque la fin de l’instruction.
Remarque : Chaque instruction en Java doit se terminer par un point-virgule (;).

Le corps de la méthode et le corps de la classe sont alors fermés.

    }  // end of main function scope
}      // end of class HelloWorld scope 

Voici un autre exemple démontrant le paradigme OO. Modélisons une équipe de football avec un (oui, un !) membre. Il peut y en avoir plus, mais nous en discuterons lorsque nous arriverons aux tableaux.

Commençons par définir notre classe Team :

public class Team {
    Member member;
    public Team(Member member) {  // who is in this Team?
        this.member = member;  //  one 'member' is in this Team!
    }
}

Maintenant, définissons notre classe Member :

class Member {
    private String name;
    private String type;
    private int level; // note the data type here
    private int rank; // note the data type here as well

    public Member(String name, String type, int level, int rank) {
        this.name = name; 
        this.type = type;
        this.level = level;
        this.rank = rank;
    }
}

Pourquoi utilisons-nous “privé” ici ? Eh bien, si quelqu’un voulait connaître votre nom, il devrait vous le demander directement, au lieu de fouiller dans votre poche et de sortir votre carte de sécurité sociale. Ce “privé” fait quelque chose comme ça : il empêche les entités extérieures d’accéder à vos variables. Vous ne pouvez renvoyer que des membres “privés” via des fonctions getter (illustrées ci-dessous).

Après avoir tout assemblé et ajouté les getters et la méthode principale comme indiqué précédemment, nous avons :

public class Team {
    Member member;
    public Team(Member member) {  
        this.member = member;  
    }

    // here's our main method
    public static void main(String[] args) {
       Member myMember = new Member("Aurieel", "light", 10, 1); 
       Team myTeam = new Team(myMember); 
       System.out.println(myTeam.member.getName());
       System.out.println(myTeam.member.getType());
       System.out.println(myTeam.member.getLevel());
       System.out.println(myTeam.member.getRank());
    }
}

class Member {
    private String name;
    private String type;
    private int level;
    private int rank;

    public Member(String name, String type, int level, int rank) {
        this.name = name; 
        this.type = type;
        this.level = level;
        this.rank = rank;
    }
    
    /* let's define our getter functions here */
    public String getName() { // what is your name?
        return this.name; // my name is ...
    }
   
    public String getType() { // what is your type?
        return this.type; // my type is ...
    }
    
    public int getLevel() { // what is your level?
        return this.level; // my level is ...
    }
    
    public int getRank() { // what is your rank?
        return this.rank; // my rank is
    }
}

Production:

Aurieel
light
10
1

Exécuter sur ideone

Encore une fois, la méthode main à l’intérieur de la classe Test est le point d’entrée de notre programme. Sans la méthode main, nous ne pouvons pas dire à la machine virtuelle Java (JVM) d’où commencer l’exécution du programme.


1 - Étant donné que la classe “HelloWorld” n’a que peu de rapport avec la classe “System”, elle ne peut accéder qu’aux données “publiques”.

[varargs-documentation] : https://www.wikiod.com/fr/java/varargs-argument-variable

[1] : https://en.wikipedia.org/wiki/Text_editor [2] : https://en.wikipedia.org/wiki/Integrated_development_environment [3] : http://stackoverflow.com/questions/1841847/can-i-compile-a-java-file-with-a-different-name-than-the-class [4] : https://www.wikiod.com/fr/java/norme-de-code-officiel-oracle#Conventions de nommage [5] : https://www.wikiod.com/fr/java/compilateur-java—javac [6] : https://en.wikipedia.org/wiki/Java_virtual_machine [7] : http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html [8] : http://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html [9] : http://openjdk.java.net/install/ [10] : https://docs.oracle.com/javase/tutorial/essential/environment/paths.html [11] : https://www.wikiod.com/fr/java/classes-et-objets [12] : https://www.wikiod.com/fr/java/visibilite-controler-lacces-aux-membres-dune-classe [13] : https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#exit-int- [14] : https://www.wikiod.com/fr/java/tableaux#Création et initialisation de tableaux [15] : https://www.wikiod.com/fr/java/debuter-avec-le-langage-java [16] : https://www.wikiod.com/fr/java/cordes