ホームページ >Java >&#&チュートリアル >Java コンストラクターのフィールドが Null またはデフォルト値を返すのはなぜですか?

Java コンストラクターのフィールドが Null またはデフォルト値を返すのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-04 20:33:18932ブラウズ

Why Are My Java Constructor Fields Returning Null or Default Values?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。