ホームページ  >  記事  >  Java  >  Java では、初期化されていないローカル変数に対してエラーが発生するのに、初期化されていないインスタンス変数に対してはエラーが発生しないのはなぜですか?

Java では、初期化されていないローカル変数に対してエラーが発生するのに、初期化されていないインスタンス変数に対してはエラーが発生しないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-24 18:47:02265ブラウズ

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

Java の初期化されていない変数とメンバー

次のスニペットを考えてみましょう。

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"
    }
}

"b" と "b" の両方とも"c" が初期化されていない場合、コンパイラは "c" に対してコンパイル時エラーを発生させますが、"b" に対しては発生させません。この違いは、インスタンス変数とローカル変数の初期化に関する言語の規則に起因します。

オブジェクト型のインスタンス変数 (「a」や「b」など) は、明示的に初期化されていない場合、デフォルトで null に初期化されます。これが、「b.notify()」にアクセスしても即時エラーが発生しない理由です。これは事実上「null.notify()」と同等だからです。ただし、このアクセスは、コードの実行時に最終的に NullPointerException をトリガーします。

対照的に、オブジェクト型のローカル変数はデフォルトでは初期化されません。 「c」などの初期化されていないローカル変数にアクセスしようとすると、直接コンパイル時エラーが発生します。この厳格な要件により、ローカル変数が使用前に常に適切に初期化されることが保証されます。

以上がJava では、初期化されていないローカル変数に対してエラーが発生するのに、初期化されていないインスタンス変数に対してはエラーが発生しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。