ホームページ  >  記事  >  Java  >  Java で一部の初期化されていない変数がコンパイル可能であるのに、他の変数がエラーを引き起こすのはなぜですか?

Java で一部の初期化されていない変数がコンパイル可能であるのに、他の変数がエラーを引き起こすのはなぜですか?

DDD
DDDオリジナル
2024-10-24 14:05:30998ブラウズ

Why Are Some Uninitialized Variables Compilable While Others Cause Errors in Java?

Java での変数の初期化: ローカル メンバーとインスタンス メンバーの違いを理解する

Java では、変数を適切に初期化することがコードの機能にとって非常に重要です。この記事では、初期化されていないローカル変数とインスタンス メンバーの対照的な処理について説明します。

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

<code class="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 will throw a runtime exception
        c.notify(); // Compile-time error: "Local variable c may not have been initialized"
    }

}</code>

b と c の両方が初期化されていないという事実から混乱が生じます。ただし、b では c のようにコンパイル時エラーが発生しません。なぜ矛盾するのでしょうか?

インスタンス メンバー (フィールド)

Java は、オブジェクト型のインスタンス変数をデフォルトで null に初期化します。 b は明示的に初期化されていないにもかかわらず、null を指します。これは、フィールドがオブジェクトの作成時に割り当てられ、null が参照型の有効な値であるためです。したがって、b.notify() はエラーが発生することなく呼び出すことができます。

ローカル変数

対照的に、ローカル変数は自動的に初期化されません。これらは、明示的に値が割り当てられるまで初期化されないままになります。初期化されていないローカル変数にアクセスしようとすると、コンパイル時エラーが発生します。これは、使用前に値が割り当てられない c の場合に明らかです。

言語仕様

Java 言語仕様 (JLS) はこれらのルールを定義しています。セクション 4.12.5:

クラス型のインスタンス変数 (オブジェクト参照) は、デフォルトで特別な値 null に初期化されます。
クラス型のローカル変数 (オブジェクト参照)参照) はデフォルトでは初期化されず、プログラムが初期化されていない参照にアクセスしようとするとコンパイル時エラーになります。

以上がJava で一部の初期化されていない変数がコンパイル可能であるのに、他の変数がエラーを引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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