2016-09-02 5 views
0

JVMSより:Javaクラスローダー:ローダーの定義とローダーの開始の違い?

クラスローダLが直接定義することによって、または別のクラスローダに を委任することによってCを作成することができます。 Lは、直接Cを作成する場合、我々はL はCを定義または、等価的に、そのLは、1つのクラスローダ委譲別のクラスローダへ

C.の 定義ローダで、ローディングを開始ローダ であると言います必ずしも がロードを完了してクラスを定義するのと同じローダーである必要はありません。 Lは、Cを作成し、いずれか によって直接、または委任によってそれを定義した場合、我々は、LがCのロード を開始したり、同等に、そのLはC.

開始ローダーである私は少し混乱していますと言いますそれらについて

我々は2つのクラスローダがあるとします。LとL Pを、そしてL Pは、CはLで定義され、成功裏Lによって作成された場合には、Lは、定義の両方であるL.

の親でありますローダーローダーを起動するのCは正しいですか?

CはLで定義されているが、L Pによって作成された場合、私はL PはCの開始ローダーですね?
ローダーを定義するCのは何ですか?? CはLで定義されていますが、直接作成されていないからです。それは問題だ。

すべての返信いただきありがとうございます。

答えて

2

通常、クラスローダーは委任メカニズムに従います。

クラスをロードしないであろうLq
Lqに委譲します委任階層L->Lp->Lqであり、クラスはこの場合Lp
で定義され、
L
LpLpにクラスのロードを委任うとしコールはLpに戻ります。
LpLpで定義されているのでクラスをロードし、呼び出しはLに戻ります。

ここでLpLは開始クラスローダーであり、Lpは定義クラスローダーです。

同様に、委任階層がL->Lpであり、クラスがLで定義されている場合、
Lが定義および開始クラスローダーになります。
Lpは、開始クラスローダーではありません。簡単に言えば

クラスローダが委譲チェーンにクラスインスタンスへの参照を返すことができれば、それが起動クラスローダです。

関連する問題