1

クラス A にクラス B のフィールドがあり、クラス B にクラス C のフィールドがある階層的なクラスのセットを想像してください。フィールドは各クラスのコンストラクターで設定されます。

ここで、クラス A のフィールド "a" を持つクラス X のオブジェクト インスタンスを作成するとします。ここで、"a" は設定されず、null のままです。

存在する場合、オブジェクト「a」からどのクラス固有の「アクション」が発生しますか? 独自のフィールドから何かを呼び出すでしょうか? クラス B または C はまったく反応しませんか? メモリ割り当てなどがあるのではないかと想像しますが、まったくわかりません。私が質問している理由は、アプリケーションのデータ フローと一連のアクションをよりよく理解するためです。

しばらくの間、この質問に対する答えを見つけようとしましたが、質問がJavaでオブジェクトを定義する方法に関する基本的な質問に少し近すぎるため、正しい質問方法を見つけることができないようです.

4

2 に答える 2

1

したがって、次のクラス定義を想定してみましょう。

public class A {
    private B b;

    public A() {
        b = new B();
    }
}

public class B {
    private C c;

    public B() {
        c = new C();
    }
}

public class C {
    public C() {
    }
}

public class X {
    private A a;

    public X() {
    }
}

ここで、次の main が実行されていると仮定します。

public static final void main (String[] argv) {
    X x = new X();
}

ここでは、 のインスタンスがXメモリ ヒープに作成され、このオブジェクトへの参照がx変数に格納されます。

aクラスの構築中に変数に値が割り当てられないため、 A のインスタンスは作成されません。a変数は、作成されたインスタンスの一部としてメモリ内のスペースを占有します(Xつまり、参照を格納できる十分なスペースが必要です) が、この場合aは値が割り当てられnullます ( Java 言語仕様 §から)。 4.12.5 )

すべての参照型 ( §4.3 ) について、デフォルト値は null です。

X次のようにクラスを変更しましょう

public class X {
    private A a;

    public X() {
        a = new A();
    }
}

main()のこの変更されたバージョンでメソッドを再度実行するXと、構築プロセスの一部として のXインスタンスAが作成され、これにより のインスタンスBが作成され、クラスのインスタンスが作成されCます。作成した。これらのインスタンスはすべてメモリ ヒープ内のスペースを占有し、これらのオブジェクトへの参照はそれぞれの変数に格納されます。

于 2013-10-31T10:23:32.417 に答える