Java クラスローダとは何か、独自のクラスローダを作成する/*なぜ*方法については、 1,000 万の記事やドキュメントがありますが、それらはすべて、私が簡単な答えを見つけることができないいくつかのことを想定しているようです!
クラスローダの仕事、つまりバイトコードを読み取り、そこからオブジェクトを構築することを理解しています。異なるクラスローダーはこれを異なる方法で行います。
しかし、自分のコードでクラスローダー API に対してコーディングする必要はなく、独自の API を記述する必要もなかったので、のコードが実際にいつ起動するかを理解するのは非常に困難です。ClassLoader
例えば:
public static void main(String[] args) {
Fizz fizz = new Fizz();
fuzz.buzz();
}
ここにFizz
オブジェクトがあります。をインスタンス化する前にFizz
、クラスローダーを起動しFizz.class
てそのキャッシュにロードする必要があります。これはいつ、どこで起こっているのですか?!?! 私のコードでは明示的ではないので、暗黙的に JRE のどこかにあるはずです...?
その質問に接して、たとえば、独自のクラスローダーを作成しWidgetClassLoader
、アプリケーションのすべてのクラスをロードするように構成したい場合、またはおそらく私のFizz.class
. WidgetClassLoader
? 私のコードはこのクラスローダを明示的に呼び出す必要がありますか、それとも最初の例のように暗黙的でしょうか? 前もって感謝します!