[Javaの]クラスローダがロード

クラスローダは、クラスローダですが、AVAクラスローダがあることに注意してくださいは、私たち自身のクラスローダは、多くの場合、ClassLoaderを継承している作成するには、一つだけではありません。すべてのJavaクラスローダの合計は、カテゴリローダの2つのセットに分割されています。親がロードされて。

DKは、階層順に従って、3つのClassLoaderを提供する:

    ブートストラップクラスローダは、主にJVM自体が作業を必要とするクラスをロードします。
    拡張クラスローダ、メインロード%JAVA_HOME%\ libに\ extディレクトリにあるライブラリのクラス。
    アプリケーションのクラスローダは、メインクラスは、プログラムのデフォルトのクラスローダもClassLoader.getSystemClassLoader()の戻り値で、一般的にクラスパスの指定されたライブラリを、ロードされます。(クラスパスデフォルトはクラスパス環境変数の設定を指すが、Javaクラスパスは、現在のプログラムによって使用されるコマンドを実行するとき-cpパラメータを変更するために使用することができる場合)

負荷への親はどのようなものです:

クラスローダの負荷がクラスが要求を受信した場合は、彼が最初にこのクラスをロードしようとするために所有していませんが、この要求は、親ローダに委託し、クラスローダのそれぞれの層はそう、すべて、真であります最後のクラスのロード要求がブートストラップクラスローダのトップに送信する必要があり、親ローダフィードバックは、彼らがロード要求を処理できないときにのみ、子ローダーはそれをロードしようとします。

ユーザー定義クラスならば、システムのセキュリティ上の問題を回避するために、このようExtClassLoader。AppClassLoaderとして、他のクラスローダを使用します。

なぜ負荷に両親、あなたはJavaクラスなど、クラスを定義する場合、内蔵、両親ローディング機構の使用は、システムの安全性を確保するように、java.lang.Stringなど、そして最終的には、セキュリティシェイク世代をもたらします。

もう一つの利点ローダーカスタムクラスを使用すると、ユーザー定義のクラスファイルのソースであってもよいが、場合、デフォルトのクラスローダは、CLASSPATHの負荷によっては十分ですが、あなたはあなた自身の負荷を定義した場合、リモート定義をロードすることができます。

おすすめ

転載: www.cnblogs.com/guangluwutu/p/12300771.html