20_名前空間のクラスローダと実際の分析を徹底的に理解

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq_43277087/article/details/102736081

ここに画像を挿入説明
それをロードしMyCat?

それをロードするために、MyCatを使用する場合、上記のコードは、ローダは、MYSAMPLEをロードします。
プロジェクトファイルがAPPClassLoadがそれをロードすることはできませんMyCat.Classが、削除された場合、明らかにカスタムローダーはMySample.Classがアプリケーションクラスローダーをロードした場合、その後、MyCat.ClassはAPPClassLoaderになり、その親をロードしようとし、それを読み込むことができますしかし、失敗したMyCat.Classが直接エラーをロードした場合に成功することはできません、
ここに画像を挿入説明
あなたはMyCat.Classファイルを残して、ファイルMySample.Classを削除する場合は、カスタムクラスをロードすることができMySample.Class、MyCat.Classは、両方のセットローダーすることができそれは何でしょうか?

ここに画像を挿入説明
ここに画像を挿入説明
カスタムローダーは、最初の父はそれAppClassLoaderに委託し、AppClassLoaderはちょうどそう、このMyCatを読み込むことができますので。

コード変更の下で:
変わらず、他のMyCatの参照MYSAMPLEクラス、
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
実行した後に、何ら問題は
ここに画像を挿入説明
しかし、この時点でシステムがカスタムローダがそれを読み込むことができ、ファイルを削除しMySample.Class場合は、もう一度それを実行していませんか?

複数の論理精査、ローダーは、カスタム、MySample.Classロード
AppClassLoaderローディングMyCat.classが
MyCatコードMYSAMPLEを使用する場合しかし、それにロードされたこのMYSAMPLE AppClassLoaderでは見つかりませんでした、MYSAMPLE AppClassLoaderをロードすることです.class、結果がより少ないロードする必要があり
、出力を:

ここに画像を挿入説明
これらの2つのクラスは、クラスローダ異なる名前空間によって、ある
ここに画像を挿入説明
サブローダがクラスをロードし、親クラスローダの負荷を見つけることができる、しかし、親クラスローダの負荷がサブローダーが表示されない:スカーレットは言いましたロードされたクラスなので、上記のエラーコード

そして、コードを変換:
ここに画像を挿入説明
ここに画像を挿入説明
また、システムMySample.Classを削除しますが、カスタムローダーは、そのロードすることができ
、出力を:
ここに画像を挿入説明

ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/qq_43277087/article/details/102736081
おすすめ