Constantes (static final)
Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 18 sur 87.
La combinaison de static et final crée une constante - une valeur qui appartient à la classe et ne peut jamais changer. C'est la manière standard de définir des constantes en Java.
public class GameSettings {
public static final int MAX_PLAYERS = 4;
public static final double GRAVITY = 9.81;
public static final String GAME_TITLE = "Space Adventure";
}Par convention, les noms de constantes utilisent UPPER_SNAKE_CASE pour les distinguer des variables ordinaires. Comme elles sont à la fois static et final, vous y accédez via le nom de la classe et leurs valeurs sont garanties de ne jamais changer :
System.out.println(GameSettings.MAX_PLAYERS); // 4
// GameSettings.MAX_PLAYERS = 8; // Erreur ! Impossible de modifierLes constantes sont généralement déclarées public car elles sont destinées à être partagées dans l'ensemble de votre application. Pensez à des valeurs telles que Math.PI - c'est une constante public static final que n'importe quel code peut utiliser.
Pourquoi utiliser des constantes au lieu de valeurs codées en dur ? Si vous écrivez 4 partout dans votre code et que vous devez plus tard le changer en 6, vous devrez trouver et mettre à jour chaque occurrence. Avec une constante comme MAX_PLAYERS, vous la modifiez à un seul endroit.
Les constantes rendent également le code plus lisible - MAX_PLAYERS est plus clair qu'un mystérieux 4.
Défi
FacileConstruisons un utilitaire MathConstants qui stocke des valeurs mathématiques importantes sous forme de constantes, ainsi qu'un CircleCalculator qui utilise ces constantes pour effectuer des calculs.
Vous allez créer deux fichiers pour organiser votre code :
MathConstants.java: Créez une classe qui contient des constantes mathématiques en utilisant des champspublic static final:PIavec la valeur3.14159E(le nombre d'Euler) avec la valeur2.71828GOLDEN_RATIOavec la valeur1.61803
Main.java: Utilisez vos constantes pour effectuer des calculs de cercle. Vous recevrez un rayon en entrée et afficherez trois lignes :- L'aire du cercle :
Area: [value] - La circonférence du cercle :
Circumference: [value] - Le diamètre mis à l'échelle par le nombre d'or :
Golden Diameter: [value]
- L'aire du cercle :
Pour les calculs :
- Area = PI * radius * radius
- Circumference = 2 * PI * radius
- Golden Diameter = 2 * radius * GOLDEN_RATIO
Vous recevrez une entrée : le rayon (double).
Formatez toutes les valeurs de sortie à 2 décimales en utilisant String.format("%.2f", value). Accédez à vos constantes via le nom de la classe, comme MathConstants.PI.
Aide-mémoire
La combinaison de static et final crée une constante - une valeur qui appartient à la classe et ne peut jamais changer :
public class GameSettings {
public static final int MAX_PLAYERS = 4;
public static final double GRAVITY = 9.81;
public static final String GAME_TITLE = "Space Adventure";
}Par convention, les noms de constantes utilisent UPPER_SNAKE_CASE. Accédez aux constantes via le nom de la classe :
System.out.println(GameSettings.MAX_PLAYERS); // 4
// GameSettings.MAX_PLAYERS = 8; // Erreur ! Impossible de modifierLes constantes sont généralement déclarées public pour être partagées dans toute votre application. Elles rendent le code plus facile à maintenir et plus lisible en remplaçant les valeurs codées en dur par des noms significatifs.
Essayez vous-même
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double radius = scanner.nextDouble();
// TODO: Calculer l'aire en utilisant MathConstants.PI
// Formule: PI * radius * radius
// TODO: Calculer la circonférence en utilisant MathConstants.PI
// Formule: 2 * PI * radius
// TODO: Calculer le diamètre d'or en utilisant MathConstants.GOLDEN_RATIO
// Formule: 2 * radius * GOLDEN_RATIO
// TODO: Afficher les résultats formatés à 2 décimales
// Utiliser String.format("%.2f", value) pour le formatage
// Format de sortie:
// Area: [value]
// Circumference: [value]
// Golden Diameter: [value]
}
}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