Class Loader(Java API)

12026 ワード

JDK API
の中のもの:
public abstract class Loader extens Object
class loader
クラスの読み込みを担当するオブジェクトです。
Class Loader
抽象的なクラスです。一つを与える
クラス
の名前は、
class loader
これを構成するものを位置決めまたは取得しようとします。
クラス
の定義されたデータを返します。典型的なポリシーは、この名前をファイル名に変換し、ファイルシステムからその名前を読み込むことです。
「クラスfile」
 
一つずつ
クラス
オブジェクトには、この定義を指します。
クラス

Class Loader

reference
 
配列クラスの
クラス
オブジェクトが
class loader
作成されたのは、必要に応じて
Java runtime
自動的に発生する。配列クラスの
class loader
から
Class.get Class Loader()
は、同じメンバーの
クラスリーダー
のタイプは同じです。メンバーが基本タイプなら
array class
ありません
class loader

 
アプリケーションは実現が必要です。
Class Loader
のサブクラスを拡張します
Java
仮想マシンのダイナミックローディングタイプの方式。
 
Class loader
通常は安全管理器によって使用され、安全領域を示すために使用される。
 
Class Loader
委託モデルを使って検索します。
クラス
とリソースです。一つずつ
Class Loader
の例には連絡する父がいます。
クラスリーダー
。検索するとき
クラス
または
resource
自分で探し始める前に、
Class Loader
実例は父親に照会を依頼します。
クラスリーダー
。仮想マシンで作った
class loader
といいます
bootstrap class loader
父のキャリアはありませんが、他のものとしてもいいです。
クラスリーダー
の父のキャリアです。
 
通常の場合、
Java
仮想マシンは、プラットフォーム関連でローカルファイルシステムからクラスをロードします。例えば、
UNIX
からすると
CLASSPATH
環境変数定義のディレクトリにクラスをロードします。
 
しかし、いくつかのクラスはファイルからではなく、ネットワークやアプリケーションによって生成されるなど、他のリソースから来るかもしれません。
defineClass
方法は、1バイトの配列を1つに変換します。
クラス
クラスの実例。この新しい定義されたクラスの例は、
Class.newInstance
獲得する
 
クラスキャリアが作成したオブジェクトの方法と構造方法は、他のクラスを参照することができます。参照の種類を確定するために、
Java
仮想マシンは、最初にクラスのキャリアを作成するために呼び出します。
loadClass
方法
 
例えば、アプリケーションは、ネットワーククラスのキャリアを作成し、サーバからクラスファイルをダウンロードすることができる。コード例は以下の通りです。
   ClassLoader loader = new NetworkClassLoader(host, port);
   Object main = loader.loadClass("Main", true).newInstance();
          . . .
              findClass loadClassData,         。          ,       defineClass      。      :
     class NetworkClassLoader extends ClassLoader {
         String host;
         int port;
 
         public Class findClass(String name) {
             byte[] b = loadClassData(name);
             return defineClass(name, b, 0, b.length);
         }
         private byte[] loadClassData(String name) {
             // load the class data from the connection
              . . .
         }
     }
    
ClassLoader()ClassLoader(ClassLoader parent)
  
a)assert 
setDefaultAssertStatus(boolean enabled)
         
             setPackageAssertionStatus setClassAssertionStatus            
setClassAssetionStatus(String className,boolean enabled)
setPackageAssertionStatus(String packagename, boolean enabled)
clearAssertionStatus():          falseloader                 
b)define
defineClass()           Class    
definePackage()   name  ClassLoader    。                 。
           ,            ,                 。
 
c)find
findClass(String name)loadClass  
findLibrary(String libname)                   loader        
findResource()findResources()           。            。
findLoadedClass(String name)
findSystemClass(String name)                
d)get
getPackage(String name) getPackages()
                  Package
getResource(String name) getResources(String name)
getResourceAsStream(String name)
                           (  、  、   )
      ”/”            
null
findResource(String)     
getSystemResource(String name) getSystemResources(String name)
getSystemResourceAsStream(String name)
getSystemClassLoader()
getParent()
e)load
loadClass(String name) loadClass(String name, boolean resolve)
1findLoadedClass(String)
2.         loadClass  
3.   findClass(String)  
  resolve   trueresolveClass(Class)  
f)other
resolveClass(Class c)
setSigners(Class c, Object[] signers) 
ClassLoaderClassLoader
ありとあらゆる
Class Loader
の根はシステムです
Class Loader
デフォルトでクラスを読み込みます。すなわちローカルファイルシステムから
java.lang
カバンの中にあります
Class Loader
クラス
Class Loader
の基本的な目標は、クラスの要求に対してサービスを提供することです。
JVM
クラスが必要な場合は、名前によって
Class Loader
このクラスをお願いします。
Class Loader
このクラスを表すものを返します。
クラス
オブジェクト
このプロセスの異なる段階に対応する方法をカバーすることにより、カスタマイズされた
Class Loader
。その中の
loadClass(String name,bollan reolve)
この方法は
Class Loader
の入り口です
loadClass
メソッドがデフォルトで呼び出されます。
findClass
メソッド
Class Loader
この二つの方法をカバーするためです。
どのようにバイトコードを読んで、クラスのオブジェクトを構成しますか?
Class Loader
の中に方法があります
Class defineClass(String name,byte[]b,int off,int len)
によると
クラス
バイトコードファイル
(
如き
ハロー.class
バイトの行列を読み込み、
byte[]b
を選択して、それを変換します。
クラス
オブジェクト、これらのデータはファイル、ネットワークから派生することができます。
defineClass
この方法はバイトコードを実行時のデータ構造、検査の有効性などに分析します。この方法は最終としてマークされ,上書きできない。
他のいくつかの方法:
findSystem Class
方法:ローカルシステムからファイルを読み込みます。ローカルファイルシステムでクラスファイルを探しています。
defineClass
元のバイトを変換
クラス
オブジェクトをクラスに変換します。
 
一、 
仕事の流れ
1)    
呼び出し
findLoaded Class(String)
を選択します。既に読み込まれているクラスが存在するかどうかを確認します。既存のバイトを取得します。
2)    
親を通す
Class Loader
呼び出し
loadClass
方法は、親の場合は
Class Loader
はい、
null
を選択します。デフォルトでクラスを読み込みます。すなわちシステムです。
Class Loader
3)    
呼び出し
findClass
(
String
)クラスを検索してクラスを取得する
4)    
もし
loadClass

レスリング
パラメータの値は
true
を選択します
reolveClass
解析
クラス
オブジェクト
5)    
もしまだクラスがないなら、帰ります。
Class Not FoundException
6)    
クラスを呼び出しプログラムに戻します。