クラスローディング機構 - 両親の委任メカニズム(C)

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
コードの表示

 

おすすめ

転載: www.cnblogs.com/xhlwjy/p/11290931.html