Maison  >  Article  >  Java  >  Pourquoi Java génère-t-il une erreur pour les variables locales non initialisées mais pas pour les variables d'instance non initialisées ?

Pourquoi Java génère-t-il une erreur pour les variables locales non initialisées mais pas pour les variables d'instance non initialisées ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 18:47:02265parcourir

Why Does Java Raise an Error for Uninitialized Local Variables but Not for Uninitialized Instance Variables?

Variables et membres non initialisés en Java

Considérez l'extrait suivant :

public class TestClass {

    private String a;
    private String b;

    public TestClass() {
        a = "initialized";
    }

    public void doSomething() {
        String c;

        a.notify(); // This is fine
        b.notify(); // This is fine - but will end in an exception
        c.notify(); // "Local variable c may not have been initialized"
    }
}

Bien que "b" et "c" n'est pas initialisé, le compilateur génère une erreur de compilation pour "c" mais pas pour "b". Cette différence provient des règles du langage pour l'initialisation des variables d'instance et des variables locales.

Les variables d'instance de type objet (comme "a" et "b") sont par défaut initialisées à null lorsqu'elles ne sont pas explicitement initialisées. C'est pourquoi l'accès à "b.notify()" n'entraîne pas d'erreur immédiate, car c'est effectivement équivalent à "null.notify()". Cependant, cet accès déclenchera à terme une NullPointerException lors de l'exécution du code.

En revanche, les variables locales de type objet ne sont pas initialisées par défaut. Tenter d'accéder à une variable locale non initialisée, telle que "c", entraîne directement une erreur de compilation. Cette exigence stricte garantit que les variables locales sont toujours correctement initialisées avant d'être utilisées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn