0Pricing
Java Academy · Leçon

Classes imbriquées statiques

Définissez des classes imbriquées statiques comme types auxiliaires associés, sans référence à une instance englobante.

Classes imbriquées statiques est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

Classes imbriquées statiques

Une classe imbriquée statique est définie à l'intérieur d'une autre classe avec le mot-clé static. Elle ne contient aucune référence vers l'instance de la classe englobante : elle est simplement regroupée logiquement avec celle-ci.

Déclarer une classe imbriquée statique

Utilisez le nom de la classe externe pour accéder à la classe imbriquée depuis l'extérieur.

class LinkedList<T> {
    private Node<T> head;

    // Static nested class — no outer instance reference
    private static class Node<T> {
        T data;
        Node<T> next;
        Node(T data) { this.data = data; }
    }

    public void addFirst(T item) {
        Node<T> node = new Node<>(item);
        node.next = head;
        head = node;
    }
}

Accéder à la classe depuis l'extérieur

Référencez une classe imbriquée statique publique avec OuterClass.InnerClass.

class Builder {
    public static class Config {
        public final String host;
        public final int port;
        Config(String host, int port) {
            this.host = host; this.port = port;
        }
    }
}

Builder.Config config = new Builder.Config("localhost", 8080);
System.out.println(config.host + ":" + config.port); // localhost:8080

Classe imbriquée statique ou classe interne

La différence essentielle : les classes imbriquées statiques n'ont aucune référence implicite vers l'instance externe ; les classes internes (non statiques), elles, en ont une. Les mots NOT et DO soulignent respectivement l'absence et la présence de cette référence.

class Outer {
    private int x = 10;

    // Static nested: no access to x
    static class StaticNested {
        void doSomething() {
            // System.out.println(x); // compile error — no outer reference!
            System.out.println("Static nested");
        }
    }

    // Inner class: has access to x
    class Inner {
        void doSomething() {
            System.out.println(x); // 10 — can access outer fields
        }
    }
}

Schéma Builder avec une classe imbriquée statique

Le schéma Builder classique utilise une classe imbriquée statique afin que les appelants n'aient pas besoin d'une instance externe pour créer un builder.

class Pizza {
    private final String size, crust;
    private final List<String> toppings;

    private Pizza(Builder b) {
        this.size = b.size; this.crust = b.crust; this.toppings = List.copyOf(b.toppings);
    }

    public static class Builder {
        private String size = "medium", crust = "thin";
        private List<String> toppings = new ArrayList<>();
        public Builder size(String s)    { this.size = s; return this; }
        public Builder crust(String c)   { this.crust = c; return this; }
        public Builder topping(String t) { this.toppings.add(t); return this; }
        public Pizza build()             { return new Pizza(this); }
    }
}

Entrée dans les maps

Map.Entry est une interface imbriquée statique bien connue, utilisée pour parcourir des paires clé-valeur.

import java.util.*;

Map<String, Integer> scores = Map.of("Alice", 95, "Bob", 87, "Carol", 92);

for (Map.Entry<String, Integer> entry : scores.entrySet()) {
    System.out.printf("%-10s: %d%n", entry.getKey(), entry.getValue());
}

// Modern: using var
for (var entry : scores.entrySet()) {
    System.out.println(entry.getKey() + " -> " + entry.getValue());
}

Tester avec une classe imbriquée statique

Dans les tests unitaires, une classe imbriquée statique peut contenir des dispositifs de test ou des implémentations simulées limitées à la classe de test.

class UserServiceTest {
    // Static nested fake/stub — no outer instance needed
    static class FakeUserRepository implements UserRepository {
        private final Map<Long, User> store = new HashMap<>();

        public void save(User u) { store.put(u.id(), u); }

        public Optional<User> findById(long id) {
            return Optional.ofNullable(store.get(id));
        }
    }

    // @Test methods use FakeUserRepository
    void testFindUser() {
        FakeUserRepository repo = new FakeUserRepository();
        // ...
    }
}

Classe imbriquée statique pour la logique métier

Regroupez les types associés au moyen de classes imbriquées statiques afin de mieux organiser les modèles métier.

class Order {
    private final long id;
    private final List<LineItem> items;

    // Static nested — logically belongs to Order, no outer reference needed
    public static class LineItem {
        public final String sku;
        public final int quantity;
        public final double unitPrice;

        public LineItem(String sku, int qty, double price) {
            this.sku = sku; this.quantity = qty; this.unitPrice = price;
        }

        public double total() { return quantity * unitPrice; }
    }

    // ...
}

Comparaison : classe imbriquée statique ou classe de niveau supérieur

Préférez une classe imbriquée statique lorsqu'une classe est utilisée uniquement dans le contexte de la classe externe. Utilisez une classe de niveau supérieur lorsqu'elle a une portée d'utilisation plus large.

Classes imbriquées statiques avec des types génériques

Les classes imbriquées statiques utilisent les types génériques comme les classes de niveau supérieur.

class Pair<A, B> {
    // Static nested with its own type params
    public static class Mutable<X, Y> {
        public X first;
        public Y second;
        public Mutable(X first, Y second) {
            this.first = first; this.second = second;
        }
    }

    public static <X, Y> Mutable<X, Y> mutableOf(X x, Y y) {
        return new Mutable<>(x, y);
    }
}
Pair.Mutable<String, Integer> p = Pair.mutableOf("Alice", 30);
System.out.println(p.first + " is " + p.second); // Alice is 30

Efficacité mémoire

Les classes imbriquées statiques ne contiennent pas de référence vers l'instance externe. Cela évite de conserver accidentellement l'objet externe en mémoire, ce qui peut provoquer des fuites mémoire dans des structures à longue durée de vie.

Vérification rapide

Qu'est-ce qui distingue une classe imbriquée statique d'une classe interne (non statique) ?

Récapitulatif : classes imbriquées statiques

Points essentiels :

  • Les classes imbriquées statiques sont regroupées avec la classe externe, mais ne possèdent aucune référence vers une instance externe
  • Accès depuis l'extérieur : OuterClass.NestedClass
  • L'absence de référence implicite évite de conserver accidentellement l'instance externe en mémoire
  • Le schéma Builder utilise couramment une classe Builder imbriquée statique
  • Map.Entry est une interface imbriquée statique bien connue
  • Préférez une classe imbriquée statique lorsque la classe interne n'a pas besoin d'accéder à l'instance externe

Questions Fréquemment Posées

La leçon « Classes imbriquées statiques » est-elle gratuite ?

Oui — le texte complet de « Classes imbriquées statiques » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Classes imbriquées statiques » ?

Définissez des classes imbriquées statiques comme types auxiliaires associés, sans référence à une instance englobante. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Classes imbriquées statiques » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Classes imbriquées statiques
  2. Classes internes et accès à la classe externe
  3. Classes locales et anonymes
  4. Choisir la bonne stratégie d’imbrication
← Retour à Java Academy