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」などの初期化されていないローカル変数にアクセスしようとすると、直接コンパイル時エラーが発生します。この厳格な要件により、ローカル変数が使用前に常に適切に初期化されることが保証されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3