「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java では、初期化されていないローカル変数に対してエラーが発生するのに、初期化されていないインスタンス変数に対してはエラーが発生しないのはなぜですか?

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

2024 年 11 月 22 日に公開
ブラウズ:632

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」と「c」は両方とも初期化されていませんが、コンパイラは「c」に対してコンパイル時エラーを発生させますが、「b」に対しては発生させません。この違いは、インスタンス変数とローカル変数の初期化に関する言語の規則に由来しています。

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

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

リリースステートメント この記事は次の場所に転載されています: 1729738619 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3