基本的な概念クラスローダ
クラスローダ(クラスローダー)は、Java仮想マシン用のJavaクラスをロードします。一般的には、次のようにJavaクラスを使用して、Java仮想マシン:Javaソース(.javaファイル)は、Javaコンパイラの後にJavaバイトコード(.classファイル)に変換されます。
クラスローダは、Javaバイトコードを読み取るための責任がある、とjava.lang.Classクラスのインスタンスに変換します。Javaクラスのような各インスタンスが表すために使用されます。この例によってのnewInstance()メソッドは、そのクラスのオブジェクトを作成するために使用することができます。実際の状況は、このようなJavaバイトコードとして、より複雑かもしれ動的ツールによって生成されてもよいし、あるいは、ネットワークを介してダウンロードすることができます。
実質的にクラスローダの全ては、クラスjava.lang.ClassLoaderのインスタンスです。
親の委譲クラスローディング機構
クラスをロードするJVMのデフォルトは親デリゲートメカニズムを使用しています。人気話すには、親クラスローダクラスローダが返す成功したタスクを完了することができた場合、ターン再帰では、最初の親クラスローダに委託タスクをロードし、要求に応じて、クラスをロードするために、特定のクラスローダです。唯一の親クラスローダは、このタスクの負荷を完了し、それ自体をロードすることはできません。
java.lang.ClassLoaderの类
java.lang.ClassLoaderの基本的なデューティ・クラスは、検索または対応するバイトコードを生成し、これらのクラス、すなわちクラスのjava.lang.ClassからJavaバイトコードを定義するには、特定のクラスの名前に基づいていますインスタンス。また、クラスローダはまた、このような画像ファイルや設定ファイルなどのJavaアプリケーションをロードするために必要なリソースを担当しています。
Javaのクラスローダカテゴリ
Javaクラスローダは1つが別のクラスによって提供されるシステムであり、2つのカテゴリに分けることができる書き込むためのJavaアプリケーション開発者です。
システムは、3つの主要なクラスローダを提供します
- ブートストラップクラスローダ(ブートストラップクラスローダ):Javaのコアライブラリをロードするために使用されているが、ネイティブコードが実装され、それがjava.lang.ClassLoaderのから継承されていません。
- 拡張クラスローダ(拡張クラスローダ):Javaの拡張ライブラリをロードするために使用されます。Java仮想マシンの実装では、豊富なライブラリのディレクトリを提供します。このクラスローダは見つけると、このディレクトリにJavaクラスをロードします。
- システムクラスローダ(システムクラスローダ):これは、Javaアプリケーションのパス(クラスパス)をロードするクラスに応じたJavaクラスです。一般的には、クラスのJavaアプリケーションは、それがロード完了までに作られています。あなたは、ClassLoader.getSystemClassLoader()でそれを得ることができます。