2016-09-18 5 views
0

Javaクラスがロードされると、このクラスで参照されている(インスタンス化されていない)クラスだけが読み込まれますか?参照クラスがインスタンス化されるか、静的フィールドに値が代入されるまで、ロードされないことがわかります。しかし、私はこの動作がJVMからJVMに変わることを知りました。本当ですか?Javaクラスがロードされると、このクラスで参照されている(インスタンス化されていない)クラスだけが読み込まれますか?

+0

Java言語仕様とJVM仕様を読んで、クラスロードの複雑さを理解してください。 StackOverflowではあまりにも幅広く、他の場所では既によく文書化されています。 –

答えて

0

クラスをロードするために、これらの2つのオーバーロードされたメソッドがあります。

loadClass(name, resolve); 
loadClass(name); 

ここで解決するのはブール型フラグであり、真である場合には、参照されたクラスもすべて解決されます。 falseの場合、参照されたクラスはロードされません。

ロードするクラスについては、resolve変数は常にtrueになります。システムがloadClass()を再帰的に呼び出しているときにのみ、この変数を設定することができます。これは、要求されているクラスがすでに解決されていることを認識しているためです。

Here, loadClass(name); calls loadClass(name, false); 
0

を使用した場合にのみ、クラスがロードされます。

ClassLoaderに何をしているのかを示すことで、それを「証明」するのはかなり簡単です。その動作についてはhereを参照してください。

I これは、と指定されています。 JVMのプロパティです。つまり、すべてのJVMがそうするべきです(詳細はhereを参照してください)。

あなたが見る - 他のものは意味をなさないでしょう。一部のクラスは、10、20の他のクラスを参照することがあります。 がロードされているときに、これらのクラスをすべてロードしたいですか?そして、Aのそれらの参照が参照しているすべての10、20のクラス?!あなたがそれらを必要とするかどうかを知らずに!

関連する問題