1. Livres & vidéos
  2. Java
  3. Comprendre un programme
Extrait - Java Les fondamentaux du langage (avec exercices pratiques et corrigés) (2e édition)
Extraits du livre
Java Les fondamentaux du langage (avec exercices pratiques et corrigés) (2e édition) Revenir à la page d'achat du livre

Comprendre un programme

Anatomie et point d’entrée d’un programme

Il est souvent dit que « tout est objet en Java ». Cela signifie que, pour concevoir un programme, il est nécessaire de définir au moins une classe. La structure minimale d’un programme Java est illustrée par le code suivant :

1    public class Example { 
2        public static void main(String[] args) { 
3            System.out.println("Hello World!"); 
4        } 
5    } 

Dans ce code, nous définissons une nouvelle classe nommée Example. Le nom de la classe est libre, à condition de respecter les conventions de nommage (voir la section correspondante dans ce chapitre).

Cette classe contient une méthode spéciale appelée main. Il s’agit du point d’entrée du programme : c’est toujours la première méthode exécutée lors du lancement d’une application Java. Sa signature doit être exactement celle présentée à la ligne 2. Le code de cette méthode est délimité par les accolades ouvrante (ligne 2) et fermante (ligne 4).

Décomposition du code

  • Classe Example (ligne 1)

La classe...

Les variables

1. Introduction

Les variables permettent de mémoriser, pendant l’exécution d’une application, différentes valeurs utiles à son bon fonctionnement.

Avant d’utiliser une variable dans un programme, il est important de savoir la déclarer, quel nom lui donner, et quel type lui associer. Ces aspects seront détaillés dans les prochaines sections.

2. Les emplacements

En Java, les variables peuvent être déclarées à différents endroits du code, tant qu’elles se trouvent à l’intérieur des accolades d’une classe, d’une interface ou d’une énumération. Il n’est pas possible de déclarer une variable en dehors de ces structures.

Une règle essentielle : une variable doit toujours être déclarée avant d’être utilisée.

Selon l’endroit où elle est déclarée, une variable appartient à l’une des catégories suivantes :

  • Variable d’instance : déclarée à l’intérieur d’une classe (hors de toute méthode), elle est propre à chaque instance de cette classe. Chaque objet possédera sa propre copie de la variable.

  • Variable de classe : déclarée à l’intérieur d’une classe avec le mot-clé static, elle est partagée par toutes les instances. Elle est accessible directement via le nom de la classe.

  • Variable locale : déclarée à l’intérieur d’une méthode, elle n’est accessible qu’au sein de cette méthode et n’existe que pendant son exécution.

  • Paramètre de méthode : il s’agit d’une forme particulière de variable locale. Elle est initialisée automatiquement lors de l’appel de la méthode :

La structure suivante permet de visualiser l’emplacement de ces différentes catégories :

public class EmplacementDesVariables { 
 
    // variable d'instance 
    int instanceVariable; 
 
    // variable de classe 
    static int classVariable; 
 
    void uneMethode(int...

Les constantes

Dans une application, il est fréquent d’utiliser des valeurs numériques ou des chaînes de caractères qui ne doivent pas être modifiées durant l’exécution. Pour améliorer la lisibilité et la maintenance du code, il est recommandé de regrouper ces valeurs sous forme de constantes.

La définition d’une constante en Java se fait en ajoutant le mot-clé final devant la déclaration de la variable. Il est impératif d’initialiser la constante au moment de sa déclaration, car c’est la seule occasion où une affectation est possible.

Voici un exemple de définition d’une constante :

final double VAT = 1.20; 

La constante ainsi définie peut ensuite être utilisée dans le code à la place de la valeur littérale qu’elle représente :

finalPrice = price * VAT; 

Les règles de durée de vie et de portée des constantes sont identiques à celles des variables.

Il est également possible de calculer la valeur d’une constante à partir d’une autre :

final int TOTAL = 100; 
final int HALF = TOTAL / 2; 

De nombreuses constantes sont déjà définies dans les bibliothèques standards du langage Java. Ces constantes sont généralement déclarées en tant que membres...

Les énumérations

Une énumération permet de définir un ensemble de constantes fonctionnellement liées entre elles. Sa déclaration s’effectue de la manière suivante :

public enum FrenchDay { 
    DIMANCHE, 
    LUNDI, 
    MARDI, 
    MERCREDI, 
    JEUDI, 
    VENDREDI, 
    SAMEDI 
} 

La première valeur de l’énumération est initialisée à zéro, et les suivantes sont automatiquement incrémentées de 1. D’une certaine manière, le compilateur interprète cette déclaration comme si elle avait été écrite ainsi :

public class FrenchDay { 
    public static final int DIMANCHE = 0; 
    public static final int LUNDI = 1; 
    public static final int MARDI = 2; 
    public static final int MERCREDI = 3; 
    public static final int JEUDI = 4; 
    public static final int VENDREDI = 5; 
    public static final int SAMEDI = 6; 
} 

En réalité, une énumération est une classe spéciale qui hérite implicitement de la classe java.lang.Enum. Les éléments définis dans l’énumération sont les seules instances possibles de cette classe. Comme toute classe...

Les conventions de nommage

Les conventions de nommage sont des règles et bonnes pratiques qui permettent de nommer les éléments du code, comme les variables, les classes ou les méthodes, de manière claire et cohérente. Leur respect est fondamental en Java, car il favorise la lisibilité, la compréhension et la maintenance du code, en particulier dans un contexte de travail en équipe.

Les noms de classes doivent commencer par une majuscule et suivre le style CamelCase, où chaque mot commence par une majuscule sans séparateur. Par exemple :

Person 
CustomerAccount 
HelloWorldApp 

Le nom d’une classe doit être suffisamment descriptif pour refléter son rôle ou sa responsabilité.

Les méthodes commencent par une minuscule et suivent, elles aussi, le style camelCase. Chaque mot suivant commence par une majuscule, comme dans :

getName 
calculateTotal 
sendMessage 

Le nom d’une méthode doit indiquer l’action accomplie, souvent sous la forme d’un verbe.

Certaines méthodes doivent impérativement respecter un nom précis pour fonctionner correctement. C’est le cas de la méthode main, point d’entrée de tout programme Java. Elle doit être nommée exactement main, en respectant la casse, et posséder la signature suivante :

public static void main(String[]...

Les arguments d’un programme

1. Fonctionnement

Il est possible de passer des arguments à un programme Java pour qu’il adapte son comportement en fonction des valeurs fournies. Ces arguments sont accessibles via le tableau de chaînes de caractères nommé args, qui est passé en paramètre à la méthode main.

Pour passer des arguments lors de l’exécution du programme, il suffit d’utiliser l’outil java et d’ajouter les arguments directement après le nom du programme sur la même ligne de commande. Le séparateur utilisé est l’espace. Par exemple :

java MyJavaProgram arg1 arg2 arg3 

Dans ce cas, le tableau args contiendra trois éléments : arg1, arg2 et arg3.

Si un argument contient un espace, il faut entourer la valeur avec des guillemets. Ainsi :

java MyJavaProgram arg1 arg2 "arg 3" 

Dans ce cas, le tableau args contiendra trois éléments : arg1, arg2 et arg3

Si un argument contient un espace, il faut entourer la valeur avec des guillemets. Ainsi :

java MyJavaProgram arg1 arg2 "arg \"3\"" 

Dans ce cas, args contiendra les chaînes arg1, arg2 et arg "3".

Pour mieux comprendre comment manipuler un tableau et parcourir ses éléments, il est recommandé de consulter la section dédiée aux tableaux un peu plus haut...

Les opérateurs

Les opérateurs sont des mots-clés du langage permettant d’exécuter des opérations sur le contenu de certains éléments, en général des variables, des constantes, des valeurs littérales, ou des retours de fonctions. La combinaison d’un ou de plusieurs opérateurs avec les éléments sur lesquels ils s’appuient constitue ce que l’on appelle une expression. Ces expressions sont évaluées au moment de l’exécution, en fonction des opérateurs utilisés et des valeurs associées.

On distingue deux types principaux d’opérateurs :

  • Les opérateurs unaires, qui ne travaillent que sur un seul opérande.

  • Les opérateurs binaires, qui nécessitent deux opérandes.

Les opérateurs peuvent être regroupés en sept grandes catégories. Commençons par la première.

1. Les opérateurs unaires

Voici les principaux opérateurs unaires disponibles :

Opérateur

Action

-

Valeur négative

~

Complément à 1 (inversion des bits)

++

Incrémentation

--

Décrémentation

!

Négation

L’opérateur ! est uniquement utilisable sur des variables de type boolean ou sur des expressions produisant un résultat de type boolean, comme une comparaison.

Les opérateurs unaires peuvent être employés avec deux notations différentes : la notation préfixée, où l’opérateur est placé avant l’opérande, et la notation postfixée, où l’opérateur est placé après l’opérande. La position de l’opérateur influence le moment où l’opération est appliquée.

Si l’opérateur est en position préfixée, il agit sur l’opérande avant son utilisation dans l’expression.

Si l’opérateur est en position postfixée, il agit après l’utilisation de l’opérande.

Cette distinction peut avoir un impact sur le résultat. Par exemple :

int i; 
i = 3; 
System.out.println(i++); 

Dans cet exemple, l’instruction affiche 3, car l’incrémentation est effectuée après l’utilisation...

Les structures de contrôle

1. Présentation

Les structures de contrôle permettent d’agir sur le déroulement d’un programme. Grâce à elles, vous pouvez modifier l’ordre dans lequel les instructions sont exécutées.

On distingue deux grandes familles : les structures de décision, qui permettent de choisir entre plusieurs chemins d’exécution selon une condition, et les structures de boucle, qui permettent de répéter un bloc d’instructions tant qu’une condition est vérifiée, ou jusqu’à ce qu’elle le soit.

2. Structures de décision

a. Structure if

L’instruction if permet de tester une condition et d’exécuter un bloc d’instructions seulement si cette condition est vraie (true).

Voici la forme la plus simple :

if (condition) { 
    instruction; 
} 

La condition doit être une expression produisant un résultat de type boolean. Si cette condition est vraie, l’instruction est exécutée ; sinon, elle est ignorée.

Lorsque vous souhaitez exécuter plusieurs instructions dans ce cas, vous devez les regrouper entre accolades :

if (condition) { 
    instruction1; 
    instruction2; 
    // etc. 
} 

Il est également possible de prévoir un autre bloc d’instructions à exécuter lorsque la condition est fausse, à l’aide de l’instruction else :

if (condition) { 
    // instructions exécutées si la condition est vraie 
} else { 
    // instructions exécutées si la condition est fausse 
} 

Pour tester plusieurs conditions différentes, vous pouvez enchaîner les blocs avec des else if :

if (condition1) { 
    // instructions si condition1 est vraie 
} else if (condition2) { 
    // instructions si condition2 est vraie 
} else { 
    // instructions exécutées si aucune des conditions précédentes 
    // n'est vraie 
} 

Dans cette dernière forme, les conditions...

Exercices

1. Exercice 1

Pour vous entraîner à manipuler des tableaux en Java, cet exercice vous propose de travailler avec un tableau de chaînes de caractères représentant des prénoms. L’objectif est d’apprendre à parcourir un tableau, à analyser son contenu, puis à modifier l’ordre des éléments.

Consignes :

 Déclarez un tableau contenant cinq prénoms de votre choix.

 Affichez chaque prénom dans la console, un par un, à l’aide d’une boucle.

 Identifiez le prénom le plus long du tableau et affichez-le.

 Inversez l’ordre des prénoms dans le tableau, puis affichez à nouveau l’ensemble des prénoms.

Conseils :

  • Utilisez une boucle for ou while pour parcourir les éléments du tableau.

  • Pour comparer la longueur des prénoms, utilisez la méthode .length() sur chaque élément.

  • Pour inverser l’ordre, vous pouvez échanger les éléments avec une variable temporaire, en partant des extrémités vers le centre du tableau.

Cet exercice vous permettra de mettre en pratique plusieurs notions abordées dans le chapitre : déclaration de tableaux, parcours avec des boucles, comparaison de chaînes, et modification des données.

2. Exercice 2

Dans cet exercice, vous allez créer...

Corrections

1. Exercice 1

import java.util.Arrays; 
 
public class Exercice1 { 
    public static void main(String[] args) { 
        // Créer un tableau de cinq prénoms 
        String[] names = {"Alice", "Bob", "Charles", "David", "Eve"}; 
 
        // Afficher chaque prénom un par un dans la console 
        System.out.println("Affichage des prénoms :"); 
        for (String name : names) { 
            System.out.println(name); 
        } 
 
        // Trouver le prénom le plus long 
        String longestName = ""; 
        for (String name : names) { 
            if (name.length() > longestName.length()) { 
                longestName= name; 
            } 
        } 
        System.out.println("Le prénom le plus long est : " + longestName); 
 
        // Inverser l'ordre des prénoms dans le tableau 
        for (int i = 0; i < names.length / 2; i++) { 
            String temp = names[i]; 
            names[i] = names[names.length - 1 - i]; 
            names[names.length - 1 - i] = temp; 
        } 
 
        // Afficher à nouveau tous les prénoms dans l'ordre inversé ...

Conclusion

Vous disposez à présent des techniques de base pour écrire des algorithmes (déclaration des variables, utilisation des opérateurs disponibles et utilisation des structures de contrôle). Pour progresser, il faudra passer des heures à découvrir les fonctionnalités offertes par l’API Java. Rapidement, vous allez avoir besoin de connaître les bases de la programmation objet pour approfondir vos connaissances. C’est l’objectif du prochain chapitre.