クラスローダは、クラスローダですが、AVAクラスローダがあることに注意してくださいは、私たち自身のクラスローダは、多くの場合、ClassLoaderを継承している作成するには、一つだけではありません。すべてのJavaクラスローダの合計は、カテゴリローダの2つのセットに分割されています。親がロードされて。
DKは、階層順に従って、3つのClassLoaderを提供する:
ブートストラップクラスローダは、主にJVM自体が作業を必要とするクラスをロードします。
拡張クラスローダ、メインロード%JAVA_HOME%\ libに\ extディレクトリにあるライブラリのクラス。
アプリケーションのクラスローダは、メインクラスは、プログラムのデフォルトのクラスローダもClassLoader.getSystemClassLoader()の戻り値で、一般的にクラスパスの指定されたライブラリを、ロードされます。(クラスパスデフォルトはクラスパス環境変数の設定を指すが、Javaクラスパスは、現在のプログラムによって使用されるコマンドを実行するとき-cpパラメータを変更するために使用することができる場合)
負荷への親はどのようなものです:
クラスローダの負荷がクラスが要求を受信した場合は、彼が最初にこのクラスをロードしようとするために所有していませんが、この要求は、親ローダに委託し、クラスローダのそれぞれの層はそう、すべて、真であります最後のクラスのロード要求がブートストラップクラスローダのトップに送信する必要があり、親ローダフィードバックは、彼らがロード要求を処理できないときにのみ、子ローダーはそれをロードしようとします。
ユーザー定義クラスならば、システムのセキュリティ上の問題を回避するために、このようExtClassLoader。AppClassLoaderとして、他のクラスローダを使用します。
なぜ負荷に両親、あなたはJavaクラスなど、クラスを定義する場合、内蔵、両親ローディング機構の使用は、システムの安全性を確保するように、java.lang.Stringなど、そして最終的には、セキュリティシェイク世代をもたらします。
もう一つの利点ローダーカスタムクラスを使用すると、ユーザー定義のクラスファイルのソースであってもよいが、場合、デフォルトのクラスローダは、CLASSPATHの負荷によっては十分ですが、あなたはあなた自身の負荷を定義した場合、リモート定義をロードすることができます。