ホームページ >Java >&#&チュートリアル >Java コンストラクターのフィールドが Null またはデフォルト値を返すのはなぜですか?
Java コンストラクターでのフィールドの初期化に関する混乱
開発者は、クラス コンストラクターで宣言および初期化されたフィールドが null またはデフォルト値を返す状況に遭遇することがあります。尋ねられた。この動作は、Java の シャドウイング の概念に由来しています。
ローカル変数によるシャドウイング
ローカル変数がコンストラクター内で宣言されると、ローカル変数はインスタンス変数と同じ名前。ただし、Java はスコープ内でローカル変数を優先し、インスタンス変数を無視します。次の例を考えてみましょう。
public class Sample { private String[] elements; private int capacity; public Sample() { int capacity = 10; String[] elements; elements = new String[capacity]; } }
このコンストラクターでは、ローカル変数の容量は 10 に初期化されますが、インスタンス変数の容量は初期化されていないため、デフォルト値は 0 になります。同様に、ローカル変数の要素は次のようになります。配列参照が割り当てられていますが、インスタンス変数の要素は null のままです。
コンストラクターによるシャドウイングParameters
コンストラクター パラメーターは、同じ名前のインスタンス変数をシャドウすることもできます。パラメータの宣言が優先されるため、インスタンス変数に直接アクセスすることはできません。インスタンス変数を参照するには、
public Sample(int capacity) { this.capacity = capacity; }
推奨事項
のように、この主式で修飾名を使用します。混乱を避けるため、これがベスト プラクティスです。可能な場合は常に、ローカル変数、コンストラクター パラメーター、およびインスタンス変数に一意の名前を使用します。これにより、偶発的なシャドウイングが防止され、フィールドが意図したとおりに初期化されることが保証されます。
以上がJava コンストラクターのフィールドが Null またはデフォルト値を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。