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 サイトの他の関連記事を参照してください。