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); // 8Les 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.
Défi
FacileConstruisons 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 renvoietruesi la chaîne se lit de la même manière à l'endroit et à l'envers (insensible à la casse), sinonfalse
- Une méthode statique
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: trueouPalindrome: 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); // 8Restriction 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
}
}
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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesChamps (Attributs)Méthode constructeurSurcharge de constructeurRécapitulatif - Calculatrice simple4Héritage
Héritage de base (extends)Le mot-clé superRedéfinition de méthode (@Override)Chaînage de constructeursLa classe ObjectHéritage simple et multiniveauPourquoi pas d'héritage multiple de classesRécapitulatif - Hiérarchie des employés7Méthodes spéciales et classe Object
Méthode toString()equals() et hashCode()Méthode clone()compareTo() et ComparableInterface ComparatorRécapitulatif - Tri personnalisé2Modificateurs d'accès et Encapsulation
Aperçu des niveaux d'accèsMéthodes Getter et SetterMasquage d'informationsLe mot-clé finalRécapitulatif - Gestionnaire de compte bancaire5Polymorphisme
Bases de la surcharge de méthodesRedéfinition de méthodes (Run-Time)Upcasting et DowncastingL'opérateur instanceofClasses et méthodes abstraitesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageAgrégation vs CompositionClasses internes, imbriquées et anonymesEnums et méthodes d'EnumRecords (Java 16+)Classes scellées (Java 17+)11Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron MonteurPatron ObservateurPatron Stratégie3Propriétés de classe et membres statiques
Variables d'instance vs variables statiquesMéthodes statiquesBlocs statiquesConstantes (static final)Récapitulatif - Compteur et utilitaire6Interfaces et Classes Abstraites
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesDefault et Static dans les InterfacesClasses Abstraites vs InterfacesInterfaces FonctionnellesRécapitulatif - Système de Paiement9La généricité
Introduction à la généricitéClasses génériquesMéthodes génériquesParamètres de type bornésWildcards (?, extends, super)Récapitulatif - Conteneur générique12Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositePatron Itérateur