Java は ClassLoader 階層を使用してクラスをロードすることを知っています。
たとえば、プログラム:
public void test(){
A a = new A(); // Line 1 The class is accessed first time here so it should be loaded and defined
A ab = new A(); //Line 2 How can the second line be represented?
}
コードの最初の行は次のようになります
Thread.currentThread().getContextClassLoader().loadClass("A");
したがって、クラスがロードされ、のインスタンスを作成するように定義されますClass
。
問題は、2 行目が実行され、Class A
再び参照されるときです。Java はクラスを再度検索せず、ロードされたクラスの同じインスタンスを返しますか?
Java クラスローダ ドキュメントにあるように、すべてのクラス ローダはロードされたクラスのインスタンスを保持し、次の呼び出しで同じインスタンスを返す必要があります。
Java はロードされたクラスをどこに保持しますか? ClassLoader
class にはVector
、ロードされたクラスを追加するために VM によって呼び出されるクラスがあります。
質問は少し混乱しているかもしれません。基本的に、既にロードされているクラスがどのメソッドから返されるかを理解しようとしています。loadClass()
メソッドにデバッグ ポイントを保持しようとしましたが、 Line 2
.
のloadClass()
メソッドにClassLoader
はfindLoadedClass
メソッドがありますが、それも呼び出されません。