Menu
Coddy logo textTech

Blocs statiques

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

Parfois, vous devez initialiser des variables statiques avec une logique plus complexe qu'une simple affectation. Un bloc statique (également appelé initialiseur statique) s'exécute une seule fois lors du premier chargement de la classe, avant que des objets ne soient créés ou que des méthodes statiques ne soient appelées.

public class DatabaseConfig {
    private static String connectionString;
    private static int maxConnections;
    
    static {
        // Logique d'initialisation complexe
        connectionString = "jdbc:mysql://localhost:3306/mydb";
        maxConnections = 10;
        System.out.println("Database configuration loaded");
    }
}

Le bloc statique s'exécute automatiquement lorsque la classe est chargée en mémoire. Cela ne se produit qu'une seule fois, quel que soit le nombre d'objets que vous créez. C'est parfait pour l'initialisation qui nécessite plusieurs instructions, des calculs ou une logique conditionnelle.

Vous pouvez avoir plusieurs blocs statiques dans une classe, et ils s'exécutent dans l'ordre dans lequel ils apparaissent :

public class AppSettings {
    private static int[] values;
    
    static {
        values = new int[5];
    }
    
    static {
        for (int i = 0; i < values.length; i++) {
            values[i] = i * 10;
        }
    }
}

Les blocs statiques sont couramment utilisés pour initialiser des tableaux ou des collections statiques, définir des valeurs de configuration qui nécessitent des calculs et effectuer des tâches de configuration uniques au niveau de la classe.

challenge icon

Défi

Facile

Construisons un système GameConfig qui utilise des blocs statiques pour initialiser les paramètres du jeu lors du premier chargement de la classe. C'est parfait pour une configuration qui doit être calculée ou configurée une seule fois avant la création de tout objet de jeu.

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

  • GameConfig.java : Créez une classe de configuration qui initialise ses paramètres à l'aide de blocs statiques :
    • Un tableau statique privé levelThresholds (int[]) qui stocke le score nécessaire pour atteindre chaque niveau
    • Une variable statique privée maxLevel (int) stockant le nombre total de niveaux
    • Une variable statique privée configLoaded (boolean) pour suivre si l'initialisation a eu lieu
    • Utilisez un bloc statique pour initialiser maxLevel à 5 et afficher "Initializing game configuration..."
    • Utilisez un deuxième bloc statique pour créer le tableau levelThresholds avec une taille égale à maxLevel, puis remplissez-le de sorte que chaque niveau nécessite level * 100 points (le niveau 1 nécessite 100, le niveau 2 nécessite 200, etc.), et définissez configLoaded sur true
    • Une méthode statique getThreshold(int level) qui renvoie le seuil de score pour ce niveau (les niveaux sont indexés à partir de 1)
    • Une méthode statique getMaxLevel() qui renvoie le niveau maximum
    • Une méthode statique isConfigLoaded() qui renvoie si la configuration a été chargée
  • Main.java : Démontrez que les blocs statiques s'exécutent automatiquement lorsque la classe est accédée. Vous recevrez une entrée : un numéro de niveau à interroger. Affichez quatre lignes :
    • Config loaded: true ou Config loaded: false
    • Max level: [maxLevel]
    • Level [level] threshold: [threshold]
    • Level 1 threshold: [threshold] (affichez toujours le niveau 1 également)

Vous recevrez une entrée : le numéro de niveau (int) à interroger.

Remarquez comment le message d'initialisation s'affiche avant que tout code de votre Main ne s'exécute - c'est le bloc statique qui s'exécute lors du premier chargement de la classe !

Aide-mémoire

Un bloc statique (ou initialiseur statique) s'exécute une seule fois lors du premier chargement de la classe, avant que tout objet ne soit créé ou que des méthodes statiques ne soient appelées. Il est utilisé pour une logique d'initialisation complexe qui nécessite plusieurs instructions.

public class Example {
    private static String value;
    
    static {
        // Logique d'initialisation
        value = "initialized";
        System.out.println("Static block executed");
    }
}

Les blocs statiques s'exécutent automatiquement lorsque la classe est chargée en mémoire, une seule fois quel que soit le nombre d'objets créés.

Vous pouvez avoir plusieurs blocs statiques dans une classe. Ils s'exécutent dans l'ordre dans lequel ils apparaissent :

public class Example {
    private static int[] values;
    
    static {
        values = new int[5];
    }
    
    static {
        for (int i = 0; i < values.length; i++) {
            values[i] = i * 10;
        }
    }
}

Les utilisations courantes incluent l'initialisation de tableaux ou de collections statiques, la configuration de valeurs de configuration nécessitant des calculs et l'exécution de tâches de configuration uniques au niveau de la classe.

Essayez vous-même

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO: Accéder à GameConfig pour démontrer l'exécution du bloc statique
        // Les blocs statiques dans GameConfig s'exécuteront automatiquement lors du premier accès à la classe
        
        // TODO: Afficher si la configuration est chargée
        // Format: "Config loaded: true" ou "Config loaded: false"
        
        // TODO: Afficher le niveau maximum
        // Format: "Max level: [maxLevel]"
        
        // TODO: Afficher le seuil pour le niveau saisi
        // Format: "Level [level] threshold: [threshold]"
        
        // TODO: Afficher le seuil pour le niveau 1
        // Format: "Level 1 threshold: [threshold]"
    }
}
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