1.JDK 建て
また、他のクラスで唯一のルートクラスローダ 1人のローダーの親
両親はメカニズムを任命することを人気:
一つのクラスローダはされている、特定のクラスをロードすると、まだ親ローダー上記親ローダは、その後、彼の父の父に委ねた場合、直ちに、自身がロードされるが、ローダに委託父親が完了していませんルートクラスローダがロードできない場合は、常にローダーの拡大に戻っを置く、ルートクラスローダ特定のクラスからのルートクラスローダまでトレースするまで、ダウンしています。このプロセスでは、限り、成功したクラスローダがロードがあるとして、それは成功を返します。
ルートクラスローダ: JRE \ libに\ rt.jarのか、-Xbootclasspath オプションを指定したjar パッケージを
クラスローダを展開します。JRE \ libにを\ \ *ジャーEXT または-Djava.ext.dirs 指定されたディレクトリのjarファイルのパッケージ
システムクラスローダ: CLASSPATH またはDjava.class.path で指定されたクラスおよびディレクトリのjar パッケージ
カスタムクラスローダ: java.lang.ClassLoaderのサブクラスローディングカスタムクラス
2.JDK 取得クラスローダ
*を返したクラスローダーのためのクラスを。いくつかの実装は使用することができます * ヌルブートストラップ表すためにクラスローダーを。このメソッドはなり返す * nullのような実装であれば 、この クラスがブートストラップによってロードされた * クラスローダー。 パブリック クラスTest3は{ 公共 静的 ボイドメイン(文字列[]引数)がスローにClassNotFoundException { クラス <?> clazz = Class.forNameの( "java.lang.Stringで"); System.out.println(clazz.getClassLoader())。 } } クラスC { }
コンソール:
ヌル
原因:返すヌル、説明文字列クラスローダはルートクラスローダーです
パブリック クラスTest3は{ 公共 静的 ボイドメイン(文字列[]引数)がスローにClassNotFoundException { クラス <?> clazz = Class.forNameの( "java.lang.Stringでの" )。 System.out.println(clazz.getClassLoader())。 クラス <?> clazz2 = Class.forNameの( "com.cn.test.Test3" ); System.out.println(clazz2.getClassLoader())。 } } クラスC { }
コンソール:
ヌル sun.misc.Launcher$AppClassLoader@73d16e93