Menu
Coddy logo textTech

Méthodes statiques

Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 16 sur 87.

Tout comme les variables statiques appartiennent à la classe plutôt qu'aux instances, les méthodes statiques appartiennent également à la classe elle-même. Vous pouvez les appeler sans créer d'objet.

Déclarez une méthode statique en ajoutant le mot-clé static :

public class MathHelper {
    public static int add(int a, int b) {
        return a + b;
    }
    
    public static int multiply(int a, int b) {
        return a * b;
    }
}

// Call without creating an object
int sum = MathHelper.add(5, 3);      // 8
int product = MathHelper.multiply(4, 2);  // 8

Les méthodes statiques ont une restriction importante : elles ne peuvent pas accéder directement aux variables d'instance ou aux méthodes d'instance. Comme les méthodes statiques existent sans objet, il n'y a pas de référence this avec laquelle travailler.

public class Counter {
    private int count;              // Variable d'instance
    private static int total;       // Variable statique
    
    public static void incrementTotal() {
        total++;      // OK - accès à une variable statique
        // count++;   // Erreur ! Impossible d'accéder à une variable d'instance
    }
}

Les méthodes statiques sont idéales pour les opérations utilitaires qui ne dépendent pas de l'état de l'objet - pensez à des méthodes comme Math.sqrt() ou Integer.parseInt(). Elles fournissent des fonctionnalités qui ont du sens au niveau de la classe plutôt que pour des objets individuels.

challenge icon

Défi

Facile

Construisons une classe utilitaire StringUtils qui fournit des méthodes de manipulation de chaînes de caractères utiles sans avoir besoin de créer d'objets - parfait pour démontrer les méthodes statiques !

Vous allez créer deux fichiers pour organiser votre code :

  • StringUtils.java : Créez une classe utilitaire avec des méthodes statiques qui effectuent des opérations courantes sur les chaînes de caractères :
    • Une méthode statique countVowels(String text) qui renvoie le nombre de voyelles (a, e, i, o, u - à la fois en majuscules et en minuscules) dans la chaîne donnée
    • Une méthode statique reverse(String text) qui renvoie la chaîne inversée
    • Une méthode statique isPalindrome(String text) qui renvoie true si la chaîne se lit de la même manière à l'endroit et à l'envers (insensible à la casse), sinon false
  • Main.java : Utilisez votre classe utilitaire pour traiter une chaîne de caractères. Vous recevrez une entrée : une chaîne de texte. Appelez chaque méthode statique directement via le nom de la classe et affichez trois lignes :
    • Vowels: [count]
    • Reversed: [reversed string]
    • Palindrome: true ou Palindrome: false

Vous recevrez une entrée : une chaîne de texte à analyser.

N'oubliez pas que les méthodes statiques sont appelées en utilisant le nom de la classe (comme StringUtils.countVowels(text)) plutôt qu'en créant d'abord une instance. Cela rend les classes utilitaires pratiques pour les opérations qui n'ont pas besoin de maintenir d'état entre les appels.

Aide-mémoire

Les méthodes statiques appartiennent à la classe elle-même et peuvent être appelées sans créer d'objet. Déclarez-les en utilisant le mot-clé static :

public class MathHelper {
    public static int add(int a, int b) {
        return a + b;
    }
}

// Appel sans créer d'objet
int sum = MathHelper.add(5, 3);  // 8

Restriction importante : Les méthodes statiques ne peuvent pas accéder directement aux variables d'instance ou aux méthodes d'instance, car elles existent sans objet et n'ont pas de référence this :

public class Counter {
    private int count;              // Variable d'instance
    private static int total;       // Variable statique
    
    public static void incrementTotal() {
        total++;      // OK - accès à une variable statique
        // count++;   // Erreur ! Impossible d'accéder à une variable d'instance
    }
}

Les méthodes statiques sont idéales pour les opérations utilitaires qui ne dépendent pas de l'état de l'objet, comme Math.sqrt() ou Integer.parseInt().

Essayez vous-même

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        
        // TODO: Utiliser les méthodes statiques de StringUtils pour analyser le texte
        // Appeler StringUtils.countVowels(text) pour obtenir le nombre de voyelles
        // Appeler StringUtils.reverse(text) pour obtenir la chaîne inversée
        // Appeler StringUtils.isPalindrome(text) pour vérifier s'il s'agit d'un palindrome
        
        // TODO: Afficher les résultats au format :
        // Voyelles : [count]
        // Inversé : [reversed string]
        // Palindrome : true/false
        
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet