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 end in an exception c.notify(); // "Local variable c may not have been initialized" } }</code>
次のような疑問が生じます。初期化されることのないメンバー変数 b は、事前に初期化する必要があるローカル変数 c のようなコンパイル時エラーを引き起こさないのはなぜですか。 use?
ローカル変数とメンバーの違い
Java 言語仕様では、この動作を明示的に定義しています。オブジェクト型のインスタンス変数 (a や b など) のデフォルト値は null ですが、オブジェクト型のローカル変数 (c など) にはありません。これは、コンパイラが初期化されていないインスタンス変数を初期化されていないローカル変数とは異なる方法で扱うことを意味します。
インスタンス変数
インスタンス変数はデフォルトで null に初期化され、参照しないことを示します。あらゆるオブジェクトに。したがって、初期化されていないインスタンス変数にアクセスしてもコンパイル時エラーは発生しませんが、最初に有効な値が割り当てられずに変数が使用されると、実行時エラーがスローされる可能性があります。
ローカル変数
一方、ローカル変数にはデフォルト値がありません。したがって、初期化されていないローカル変数にアクセスすると、コンパイル時エラーが発生します。コンパイラは、初期化されていない変数の使用によって発生する可能性のある実行時エラーを防ぐために、このルールを適用します。
結論
Java での初期化されていない変数の動作は、言語仕様によって決まります。インスタンス変数かローカル変数かによって異なります。インスタンス変数はデフォルトで null に設定されますが、ローカル変数はコンパイル時のエラーを避けるために、使用前に有効な値に明示的に初期化する必要があります。
以上がJava では、初期化されていないメンバー変数がコンパイル時エラーを引き起こさないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。