JavaTM Platform
Standard Ed. 6

java.lang
クラス ClassLoader

java.lang.Object
  上位を拡張 java.lang.ClassLoader
直系の既知のサブクラス:
SecureClassLoader

public abstract class ClassLoader
extends Object

クラスローダーは、クラスのロードを担当するオブジェクトです。ClassLoader クラスは abstract クラスです。クラスのバイナリ名を指定すると、クラスローダーはクラスの定義を構成するデータを見つけるか生成します。一般的な方法としては、名前をファイル名に変換して、ファイルシステムからその名前の「クラスファイル」を読み込みます。  

各 Class オブジェクトは、そのオブジェクトを定義した ClassLoader への reference を格納しています。  

配列クラスの Class オブジェクトは、クラスローダーによっては作成されず、Java Runtime の要求に応じて自動的に作成されます。配列クラスのクラスローダーは、Class.getClassLoader() によって返され、その要素の型のクラスローダーと同じになります。 要素の型がプリミティブ型の場合には、配列クラスにクラスローダーはありません。  

アプリケーションは、Java Virtual Machine が動的にクラスをロードするように拡張するため、ClassLoader のサブクラスを実装します。  

クラスローダは一般的に、セキュリティマネージャがセキュリティドメインを示すために使われます。  

ClassLoader クラスは、委譲モデルを使ってクラスとリソースを探します。ClassLoader の各インスタンスは、関連する親クラスローダーを持ちます。クラスまたはリソースを見つけるために呼び出されると、ClassLoader インスタンスはそれ自体でクラスまたはリソースの検索を試みる前に、その検索を親クラスに委譲します。「ブートストラップクラスローダー」と呼ばれる仮想マシンの組み込みクラスローダーはそれ自体では親を持たず、ClassLoader インスタンスの親として動作します。  

通常、Java 仮想マシンは、プラットフォームに依存しない方法でローカルファイルシステムからクラスをロードします。たとえば、UNIX システムでは、CLASSPATH 環境変数によって定義されたディレクトリからクラスをロードします。  

ただし、ファイルから作成できないクラスもあります。 このようなクラスは、ネットワークなどのほかのソースから作成したり、アプリケーションが構築したりします。defineClass メソッドは、バイトの配列を Class クラスのインスタンスに変換します。新しく定義したクラスのインスタンスは、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 のメソッドに String パラメータとして提供されるクラス名は、『Java 言語仕様』で定義されたバイナリ名である必要があります。  

次に、有効なクラス名の例を示します。

   "java.lang.String"
   "javax.swing.JSpinner$DefaultEditor"
   "java.security.KeyStore$Builder$FileBuilder$1"
   "java.net.URLClassLoader$3$1"
 

導入されたバージョン:
1.0
関連項目:
resolveClass(Class)

コンストラクタの概要
protected ClassLoader()
          getSystemClassLoader() メソッドによって返された ClassLoader を親クラスローダーとして使用し、新しいクラスローダーを作成します。
protected ClassLoader(ClassLoader parent)
          指定された親クラスローダを使って、委譲のために新しいクラスローダを作成します。
 
メソッドの概要
 void clearAssertionStatus()
          このクラスローダーのデフォルト宣言ステータスを false に設定し、クラスローダーに関連付けられたデフォルトパッケージおよびクラス宣言ステータス設定をすべて破棄します。
protected  Class<?> defineClass(byte[] b, int off, int len)
          推奨されていません。 defineClass(String, byte[], int, int) に置き換えられました。
protected  Class<?> defineClass(String name, byte[] b, int off, int len)
          バイトの配列を Class クラスのインスタンスに変換します。
protected  Class<?> defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain)
          オプションの ProtectionDomain を使って、バイトの配列を Class クラスのインスタンスに変換します。
protected  Class<?> defineClass(String name, ByteBuffer b, ProtectionDomain protectionDomain)
          オプションの ProtectionDomain を使って、ByteBuffer を Class クラスのインスタンスに変換します。
protected  Package definePackage(String name, String specTitle, String specVersion, String specVendor, String implTitle, String implVersion, String implVendor, URL sealBase)
          この ClassLoader で名前を使ってパッケージを定義します。
protected  Class<?> findClass(String name)
          指定されたバイナリ名を持つクラスを探します。
protected  String findLibrary(String libname)
          ネイティブライブラリの絶対パス名を帰します。
protected  Class<?> findLoadedClass(String name)
          このローダーがこのバイナリ名を持つクラスの起動ローダーとして Java 仮想マシンにより記録されていた場合は、指定されたバイナリ名を持つクラスを返します。
protected  URL findResource(String name)
          指定された名前を持つリソースを検索します。
protected  Enumeration<URL> findResources(String name)
          指定された名前を持つすべてのリソースを表す URL オブジェクトの列挙を返します。
protected  Class<?> findSystemClass(String name)
          指定されたバイナリ名を持つクラスを探して、必要に応じてロードします。
protected  Package getPackage(String name)
          このクラスローダーかその上位オブジェクトのどれかによって定義された Package を返します。
protected  Package[] getPackages()
          このクラスローダーとその上位オブジェクトによって定義されたすべての Packages を返します。
 ClassLoader getParent()
          委譲のための親クラスローダーを返します。
 URL getResource(String name)
          指定された名前を持つリソースを検索します。
 InputStream getResourceAsStream(String name)
          指定されたリソースを読み込む入力ストリームを返します。
 Enumeration<URL> getResources(String name)
          指定された名前を持つすべてのリソースを検索します。
static ClassLoader getSystemClassLoader()
          委譲のためのシステムクラスローダーを返します。
static URL getSystemResource(String name)
          クラスをロードするために使用される検索パスから、指定された名前のリソースを探します。
static InputStream getSystemResourceAsStream(String name)
          クラスをロードするのに使用される検索パスから、指定された名前のリソースを、読み込み用にオープンします。
static Enumeration<URL> getSystemResources(String name)
          クラスをロードするために使用される検索パスから、指定された名前のすべてのリソースを探します。
 Class<?> loadClass(String name)
          指定されたバイナリ名を持つクラスをロードします。
protected  Class<?> loadClass(String name, boolean resolve)
          指定されたバイナリ名を持つクラスをロードします。
protected  void resolveClass(Class<?> c)
          指定されたクラスをリンクします。
 void setClassAssertionStatus(String className, boolean enabled)
          このクラスローダーおよび内部の入れ子構造クラス内の名前付きのトップレベルクラスに対して、目的の宣言ステータスを設定します。
 void setDefaultAssertionStatus(boolean enabled)
          このクラスローダーのデフォルト宣言ステータスを設定します。
 void setPackageAssertionStatus(String packageName, boolean enabled)
          名前付きパッケージのデフォルト宣言ステータスを設定します。
protected  void setSigners(Class<?> c, Object[] signers)
          クラスの署名者を設定します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

ClassLoader

protected ClassLoader(ClassLoader parent)
指定された親クラスローダを使って、委譲のために新しいクラスローダを作成します。  

セキュリティーマネージャーが存在するときに、セキュリティーマネージャーの checkCreateClassLoader メソッドが呼び出されます。これはセキュリティー例外となる場合があります。

パラメータ:
parent - 親のクラスローダー
例外:
SecurityException - セキュリティーマネージャーが存在し、その checkCreateClassLoader メソッドが新しいクラスローダーの作成を許可しない場合
導入されたバージョン:
1.2

ClassLoader

protected ClassLoader()
getSystemClassLoader() メソッドによって返された ClassLoader を親クラスローダーとして使用し、新しいクラスローダーを作成します。  

セキュリティーマネージャーが存在するときに、セキュリティーマネージャーの checkCreateClassLoader メソッドが呼び出されます。これはセキュリティー例外となる場合があります。

例外:
SecurityException - セキュリティーマネージャーが存在し、その checkCreateClassLoader メソッドが新しいクラスローダーの作成を許可しない場合
メソッドの詳細

loadClass

public Class<?> loadClass(String name)
                   throws ClassNotFoundException
指定されたバイナリ名を持つクラスをロードします。このメソッドは、loadClass(String, boolean) メソッドと同じ方法でクラスを検索します。Java 仮想マシンがこのメソッドを呼び出して、クラス参照を解決します。このメソッドを呼び出すことは、loadClass(name, false) を呼び出すことに相当します。

パラメータ:
name - クラスのバイナリ名
戻り値:
結果として得られる Class オブジェクト
例外:
ClassNotFoundException - クラスが見つからなかった場合

loadClass

protected Class<?> loadClass(String name,
                             boolean resolve)
                      throws ClassNotFoundException
指定されたバイナリ名を持つクラスをロードします。このメソッドのデフォルト実装では、次の順序でクラスを検索します。  

  1. findLoadedClass(String) を呼び出して、クラスがすでにロードされたかどうかを確認する

  2. 親クラスローダーで loadClass メソッドを呼び出す。親が null の場合、仮想マシンに組み込まれたクラスローダーが代わりに呼び出す

  3. findClass(String) メソッドを呼び出して、クラスを探す

 

上記の手順でクラスが見つかった場合、resolve フラグが true のときには、このメソッドは結果として得られる Class オブジェクトに対して resolveClass(Class) メソッドを呼び出します。  

ClassLoader のサブクラスが、このメソッドではなく findClass(String) をオーバーライドすることが推奨されています。

パラメータ:
name - クラスのバイナリ名
resolve - true の場合は、クラスを解釈処理する
戻り値:
結果として得られる Class オブジェクト
例外:
ClassNotFoundException - クラスが見つからない場合

findClass

protected Class<?> findClass(String name)
                      throws ClassNotFoundException
指定されたバイナリ名を持つクラスを探します。このメソッドは、クラスをロードするための委譲モデルに準拠するクラスローダー実装によってオーバーライドされ、必要なクラスの親クラスローダーのチェック後に loadClass メソッドによって呼び出されます。デフォルトの実装は ClassNotFoundException をスローします。

パラメータ:
name - クラスのバイナリ名
戻り値:
結果として得られる Class オブジェクト
例外:
ClassNotFoundException - クラスが見つからない場合
導入されたバージョン:
1.2

defineClass

@Deprecated
protected final Class<?> defineClass(byte[] b,
                                                int off,
                                                int len)
                              throws ClassFormatError
推奨されていません。 defineClass(String, byte[], int, int) に置き換えられました。

バイトの配列を Class クラスのインスタンスに変換します。最初に Class を解決してからでなければ、クラスを使うことはできません。このメソッドよりも、バイナリ名を最初の引数として取得するバージョンの方が安全であるため、そのバージョンを使用することをお勧めします。

パラメータ:
b - クラスデータを構成するバイト。off から off+len-1 までの位置にある byte は、Java 仮想マシン仕様で定義される有効なクラスファイルの形式を持つ
off - クラスデータの b の開始オフセット
len - クラスデータの長さ
戻り値:
指定されたクラスデータから作成された Class オブジェクト
例外:
ClassFormatError - データが有効なクラスを含まなかった場合
IndexOutOfBoundsException - off または len のどちらかが負の場合、または off+len が b.length よりも大きい場合
関連項目:
loadClass(String, boolean), resolveClass(Class)

defineClass

protected final Class<?> defineClass(String name,
                                     byte[] b,
                                     int off,
                                     int len)
                              throws ClassFormatError
バイトの配列を Class クラスのインスタンスに変換します。最初に Class を解決してからでなければ、クラスを使うことはできません。  

このメソッドは、デフォルトの ProtectionDomain を、新しく定義されたクラスに割り当てます。ProtectionDomain は、Policy.getPolicy().getPermissions(new CodeSource(null, null)) が呼び出されたときに返されるアクセス権と同じアクセス権を保持します。デフォルトのドメインは defineClass の最初の呼び出しで作成され、そのあとの呼び出しで再使用されます。  

特定の ProtectionDomain をクラスに割り当てるには、ProtectionDomain をその引数の 1 つとして取る defineClass メソッドを使います。

パラメータ:
name - クラスの予想されるバイナリ名。 不明な場合は null
b - クラスデータを構成するバイト。off から off+len-1 までの位置にある byte は、Java 仮想マシン仕様で定義される有効なクラスファイルの形式を持つ
off - クラスデータの b の開始オフセット
len - クラスデータの長さ
戻り値:
指定されたクラスデータから作成された Class オブジェクト
例外:
ClassFormatError - データが有効なクラスを含まなかった場合
IndexOutOfBoundsException - off または len のどちらかが負の場合、または off+len が b.length よりも大きい場合
SecurityException - このクラスとは異なる証明書セット (符号なし) を使って署名されたクラスを含むパッケージに、このクラスを追加しようとする場合、または nameが「java.」で始まる場合
導入されたバージョン:
1.1
関連項目:
loadClass(String, boolean), resolveClass(Class), CodeSource, SecureClassLoader

defineClass

protected final Class<?> defineClass(String name,
                                     byte[] b,
                                     int off,
                                     int len,
                                     ProtectionDomain protectionDomain)
                              throws ClassFormatError
オプションの ProtectionDomain を使って、バイトの配列を Class クラスのインスタンスに変換します。ドメインが null の場合は、デフォルトのドメインが、defineClass(String, byte[], int, int) のドキュメントで指定されているとおりクラスに割り当てられています。最初にクラスを解決してからでなければ、クラスを使用することはできません。  

パッケージで定義される最初のクラスは、そのパッケージ内で連続して定義されたすべてのクラスにある、証明書の正確なセットを判定します。クラスの証明書のセットは、クラスの ProtectionDomain 内の CodeSource から取得します。そのパッケージに追加されたクラスには同一の証明書のセットが含まれている必要があり、含まれていない場合は SecurityException がスローされます。name 引数が null の場合、この判別は実行されません。必ず、定義するクラスのバイナリ名をバイトとともに渡す必要があります。このようにして渡すと、定義するクラスは実際に考えたとおりのクラスになります。  

java.* パッケージのすべてのクラスはブートストラップクラスローダーでしか定義できないので、「java.」で始まるnameを指定することはできません。name が null ではない場合には、バイト配列「b」で指定されたクラスのバイナリ名に等しくなければいけません。 等しくない場合、NoClassDefFoundError がスローされます。

パラメータ:
name - クラスの予想されるバイナリ名。 不明な場合は null
b - クラスデータを構成するバイト。off から off+len-1 までの位置にある byte は、Java 仮想マシン仕様で定義される有効なクラスファイルの形式を持つ
off - クラスデータの b の開始オフセット
len - クラスデータの長さ
protectionDomain - このクラスの ProtectionDomain
戻り値:
データから作成された Class オブジェクトと、任意の ProtectionDomain
例外:
ClassFormatError - データが有効なクラスを含まなかった場合
NoClassDefFoundError - name が b で指定されたクラスのバイナリ名と等しくない場合
IndexOutOfBoundsException - off または len のどちらかが負の場合、または off+len が b.length よりも大きい場合
SecurityException - このクラスとは異なる証明書セットを使って署名されたクラスを含むパッケージに、このクラスを追加しようとする場合、または name が「java.」で始まる場合

defineClass

protected final Class<?> defineClass(String name,
                                     ByteBuffer b,
                                     ProtectionDomain protectionDomain)
                              throws ClassFormatError
オプションの ProtectionDomain を使って、ByteBuffer を Class クラスのインスタンスに変換します。ドメインが null の場合は、デフォルトのドメインが、defineClass(String, byte[], int, int) のドキュメントで指定されているとおりクラスに割り当てられています。最初にクラスを解決してからでなければ、クラスを使用することはできません。  

パッケージの証明書のセットを決定しているパッケージで定義された最初のクラスに関する規則と、クラス名での制約は、defineClass(String, byte[], int, int, ProtectionDomain) のドキュメントで指定されているものと同等です。  

このフォームのメソッド呼び出し cl.defineClass(name, bBuffer, pd) では、次の文と正確に同じ結果が得られます。

...
byte[] temp = new byte[
bBuffer.remaining()];
bBuffer.get(temp);
return #defineClass(String, byte[], int, int, ProtectionDomain)
cl.defineClass(name, temp, 0, temp.length, pd);

パラメータ:
name - クラスの予想されるバイナリ名。不明な場合は null
b - クラスデータを構成するバイト。b.position() から b.position() + b.limit() -1 までの位置にある byte は、Java 仮想マシン仕様で定義される有効なクラスファイルの形式を持つ
protectionDomain - このクラスの ProtectionDomain、または null
戻り値:
データから作成された Class オブジェクトと、任意の ProtectionDomain
例外:
ClassFormatError - データが有効なクラスを含まなかった場合
NoClassDefFoundError - name が b で指定されたクラスのバイナリ名と等しくない場合
SecurityException - このクラスとは異なる証明書セットを使って署名されたクラスを含むパッケージに、このクラスを追加しようとする場合、または name が「java.」で始まる場合
導入されたバージョン:
1.5
関連項目:
defineClass(String, byte[], int, int, ProtectionDomain)

resolveClass

protected final void resolveClass(Class<?> c)
指定されたクラスをリンクします。クラスローダーはこのメソッドを使って、クラスをリンクします。c クラスがすでにリンクされている場合、このメソッドは単に復帰します。そうでない場合、『Java 言語仕様』の「Execution」の章で説明しているように、クラスはリンクされます。

パラメータ:
c - リンクするクラス
例外:
NullPointerException - c が null の場合
関連項目:
defineClass(String, byte[], int, int)

findSystemClass

protected final Class<?> findSystemClass(String name)
                                  throws ClassNotFoundException
指定されたバイナリ名を持つクラスを探して、必要に応じてロードします。  

このメソッドはシステムクラスローダー ー(getSystemClassLoader() を参照) を使ってクラスをロードします。返される Class オブジェクトは、そのクラスオブジェクトに関連した ClassLoader を 1 つ以上持つことになります。ClassLoader のサブクラスは通常、このメソッドを呼び出す必要はありません。 これは、ほとんどのクラスローダーが findClass(String) だけをオーバーライドすればよいからです。

パラメータ:
name - クラスのバイナリ名
戻り値:
指定された name の Class オブジェクト
例外:
ClassNotFoundException - クラスが見つからない場合
関連項目:
ClassLoader(ClassLoader), getParent()

findLoadedClass

protected final Class<?> findLoadedClass(String name)
このローダーがこのバイナリ名を持つクラスの起動ローダーとして Java 仮想マシンにより記録されていた場合は、指定されたバイナリ名を持つクラスを返します。それ以外の場合は null を返します。

パラメータ:
name - クラスのバイナリ名
戻り値:
Class オブジェクト。 クラスがロードされていない場合は null
導入されたバージョン:
1.1

setSigners

protected final void setSigners(Class<?> c,
                                Object[] signers)
クラスの署名者を設定します。このメソッドは、クラスの定義後に呼び出す必要があります。

パラメータ:
c - Class オブジェクト
signers - クラスの署名者
導入されたバージョン:
1.1

getResource

public URL getResource(String name)
指定された名前を持つリソースを検索します。リソースは、クラスコードからコード位置に依存しない方法でアクセス可能なデータ (イメージ、オーディオ、テキストなど) です。  

リソースの名前は、「/」で区切られたパス名であり、これによってリソースが識別されます。  

このメソッドは、まずリソースの親クラスローダーを検索します。 親が null の場合、仮想マシンに組み込まれたクラスローダーのパスが検索されます。それに失敗すると、このメソッドはリソースを見つけるために findResource(String) を呼び出します。

パラメータ:
name - リソース名
戻り値:
リソースを読み込むための URL。 ただし、リソースが見つからなかった場合や、呼び出し側がリソースを取得する適切な特権を持っていない場合は null
導入されたバージョン:
1.1

getResources

public Enumeration<URL> getResources(String name)
                              throws IOException
指定された名前を持つすべてのリソースを検索します。リソースは、クラスコードからコード位置に依存しない方法でアクセス可能なデータ (イメージ、オーディオ、テキストなど) です。  

リソースの名前は、「/」で区切られたパス名であり、これによってリソースが識別されます。  

検索順については、getResource(String) のドキュメントを参照してください。

パラメータ:
name - リソース名
戻り値:
リソースに対する URL オブジェクトの列挙。リソースが見つからなかった場合、列挙は空になる。クラスローダーがアクセスを持たないリソースは列挙に入らない
例外:
IOException - 入出力エラーが発生した場合
導入されたバージョン:
1.2
関連項目:
findResources(String)

findResource

protected URL findResource(String name)
指定された名前を持つリソースを検索します。クラスローダーの実装は、リソースのロード元を特定するためにこのメソッドをオーバーライドします。

パラメータ:
name - リソース名
戻り値:
リソースを読み込むための URL オブジェクト。 リソースが見つからなかった場合は null
導入されたバージョン:
1.2

findResources

protected Enumeration<URL> findResources(String name)
                                  throws IOException
指定された名前を持つすべてのリソースを表す URL オブジェクトの列挙を返します。クラスローダーの実装は、リソースのロード元を特定するためにこのメソッドをオーバーライドします。

パラメータ:
name - リソース名
戻り値:
リソースの URL オブジェクトの列挙
例外:
IOException - 入出力エラーが発生した場合
導入されたバージョン:
1.2

getSystemResource

public static URL getSystemResource(String name)
クラスをロードするために使用される検索パスから、指定された名前のリソースを探します。このメソッドはシステムクラスローダー (getSystemClassLoader() を参照) を使ってリソースを見つけます。

パラメータ:
name - リソース名
戻り値:
リソースを読み込むための URL オブジェクト。 リソースが見つからなかった場合は null
導入されたバージョン:
1.1

getSystemResources

public static Enumeration<URL> getSystemResources(String name)
                                           throws IOException
クラスをロードするために使用される検索パスから、指定された名前のすべてのリソースを探します。見つかったリソースは URL オブジェクトの Enumeration として返されます。  

検索順については、getSystemResource(String) のドキュメントを参照してください。

パラメータ:
name - リソース名
戻り値:
リソース URL オブジェクトの列挙
例外:
IOException - 入出力エラーが発生した場合
導入されたバージョン:
1.2

getResourceAsStream

public InputStream getResourceAsStream(String name)
指定されたリソースを読み込む入力ストリームを返します。  

検索順については、getResource(String) のドキュメントを参照してください。

パラメータ:
name - リソース名
戻り値:
リソースを読み込むための入力ストリーム。 リソースが見つからなかった場合は null
導入されたバージョン:
1.1

getSystemResourceAsStream

public static InputStream getSystemResourceAsStream(String name)
クラスをロードするのに使用される検索パスから、指定された名前のリソースを、読み込み用にオープンします。このメソッドはシステムクラスローダー (getSystemClassLoader() を参照) を使ってリソースを見つけます。

パラメータ:
name - リソース名
戻り値:
リソースを読み込むための入力ストリーム。 リソースが見つからなかった場合は null
導入されたバージョン:
1.1

getParent

public final ClassLoader getParent()
委譲のための親クラスローダーを返します。実装によっては null を使って、ブートストラップクラスローダーを表す場合もあります。このメソッドは、このクラスローダーの親がブートストラップクラスローダーの場合に、そのような実装で null を返します。  

セキュリティーマネージャーが存在する場合、呼び出し側のクラスローダーが null でなく、このクラスローダーの上位オブジェクトでもない場合は、このメソッドは RuntimePermission("getClassLoader") アクセス権を使ってセキュリティーマネージャーの checkPermission メソッドを呼び出すことによって、親クラスローダーに問題なくアクセスできることを保証します。そうでない場合は、SecurityException がスローされます。

戻り値:
親の ClassLoader
例外:
SecurityException - セキュリティーマネージャーが存在し、その checkPermission メソッドがこのクラスローダーの親クラスローダーへのアクセスを許可しない場合
導入されたバージョン:
1.2

getSystemClassLoader

public static ClassLoader getSystemClassLoader()
委譲のためのシステムクラスローダーを返します。これは、新しい ClassLoader インスタンスのデフォルトの委譲の親で、通常、アプリケーションを起動するためのクラスローダーです。  

このメソッドが最初に呼び出されるのは、実行時の起動シーケンスの初期です。この時点で、メソッドはシステムクラスローダーを作成し、呼び出す Thread のコンテキストクラスローダーにそれを設定します。  

デフォルトのシステムクラスローダーは、このクラスの実装依存インスタンスです。  

このメソッドの最初の呼び出し時に、システムプロパティー「java.system.class.loader」が定義される場合、このプロパティーの値がシステムクラスローダーとして返されるクラスの名前になります。 このクラスは、デフォルトのシステムクラスローダーを使用してロードされます。また、このクラスは、委譲の親として使用される、ClassLoader 型の単一のパラメータを取る public コンストラクタを定義する必要があります。次に、このコンストラクタを使用し、デフォルトのシステムクラスローダーをパラメータに指定して、インスタンスが作成されます。結果として得られるクラスローダーは、システムクラスローダーとして定義されます。  

セキュリティーマネージャーが存在し、呼び出し側のクラスローダーが null でなく、呼び出し側のクラスローダーがシステムクラスローダーと同じではないかその上位オブジェクトでもない場合、このメソッドは RuntimePermission("getClassLoader") アクセス権を使ってセキュリティーマネージャーの checkPermission メソッドを呼び出すことで、システムクラスローダーにアクセスできるかどうかを確認します。そうでない場合は、SecurityException がスローされます。

戻り値:
委譲のためのシステム ClassLoader。 ない場合は null
例外:
SecurityException - セキュリティーマネージャーが存在し、その checkPermission メソッドがこのシステムクラスローダーへのアクセスを許可しない場合
IllegalStateException - java.system.class.loader」プロパティーにより指定されたクラスローダーの構築時に、再帰的に呼び出される場合
Error - システムプロパティー「java.system.class.loader」は定義されるが、名前付きクラスをロードできない場合、プロバイダクラスは必須コンストラクタを定義しないか、その呼び出し時に例外がスローされる。エラーの根本原因は、Throwable.getCause() メソッドを使用して取得できる

definePackage

protected Package definePackage(String name,
                                String specTitle,
                                String specVersion,
                                String specVendor,
                                String implTitle,
                                String implVersion,
                                String implVendor,
                                URL sealBase)
                         throws IllegalArgumentException
この ClassLoader で名前を使ってパッケージを定義します。これにより、クラスローダーはそのクラスのパッケージを定義します。クラスを定義する前に、パッケージを作成する必要があります。 パッケージ名については、クラスローダー内で一意とし、作成後の再定義や変更はできません。

パラメータ:
name - パッケージ名
specTitle - 仕様のタイトル
specVersion - 仕様のバージョン
specVendor - 仕様のベンダー
implTitle - 実装のタイトル
implVersion - 実装のバージョン
implVendor - 実装のベンダー
sealBase - null でない場合、このパッケージは指定されたコードソース URL オブジェクトを考慮してシールされる。そうでない場合、パッケージはシールされない
戻り値:
新しく定義された Package オブジェクト
例外:
IllegalArgumentException - パッケージ名が、このクラスローダーかまたはその上位オブジェクトのうちの 1 つに存在するパッケージと重複する場合
導入されたバージョン:
1.2

getPackage

protected Package getPackage(String name)
このクラスローダーかその上位オブジェクトのどれかによって定義された Package を返します。

パラメータ:
name - パッケージ名
戻り値:
指定された名前に対応する Package。見つからない場合は null
導入されたバージョン:
1.2

getPackages

protected Package[] getPackages()
このクラスローダーとその上位オブジェクトによって定義されたすべての Packages を返します。

戻り値:
この ClassLoader によって定義された Package オブジェクトの配列
導入されたバージョン:
1.2

findLibrary

protected String findLibrary(String libname)
ネイティブライブラリの絶対パス名を帰します。VM は、このメソッドを呼び出して、このクラスローダーによってロードされたクラスのネイティブライブラリを検索します。このメソッドが null を返す場合、VM は「java.library.path」プロパティーで指定されたパスに従ってライブラリを検索します。

パラメータ:
libname - ライブラリ名
戻り値:
ネイティブライブラリの絶対パス
導入されたバージョン:
1.2
関連項目:
System.loadLibrary(String), System.mapLibraryName(String)

setDefaultAssertionStatus

public void setDefaultAssertionStatus(boolean enabled)
このクラスローダーのデフォルト宣言ステータスを設定します。この設定により、将来、このクラスローダーがロードおよび初期化するクラスの、デフォルト宣言が有効または無効に決定されます。setPackageAssertionStatus(String, boolean) または setClassAssertionStatus(String, boolean) を呼び出すことで、この設定をパッケージまたはクラス単位でオーバーライドできます。

パラメータ:
enabled - このクラスローダーによりロードされるクラスの宣言が、デフォルトで有効な場合は true、デフォルトで無効な場合は false
導入されたバージョン:
1.4

setPackageAssertionStatus

public void setPackageAssertionStatus(String packageName,
                                      boolean enabled)
名前付きパッケージのデフォルト宣言ステータスを設定します。パッケージのデフォルト宣言ステータスにより、名前付きパッケージまたはその「サブパッケージ」のどれかに属する、将来初期化されるクラスの宣言ステータスが決まります。  

p という名前のパッケージのサブパッケージは、すべて名前が「p.」で始まります。たとえば、javax.swing.text は javax.swing のサブパッケージです。 また、java.util と java.lang.reflect はどちらも、java のサブパッケージです。  

1 つのクラスに複数のデフォルトパッケージ適用される場合には、そのクラスにもっとも関連性の高いデフォルトパッケージが、ほかのパッケージに優先して使用されます。たとえば、javax.lang と javax.lang.reflect がどちらも関連付けられたデフォルトパッケージを保持する場合、後者のデフォルトパッケージは javax.lang.reflect 内のクラスに適用されます。  

デフォルトパッケージは、クラスローダーのデフォルト宣言ステータスよりも優先されます。 ただし、setClassAssertionStatus(String, boolean) を呼び出すことで、クラス単位でオーバーライドできます。

パラメータ:
packageName - パッケージデフォルト宣言ステータスを設定するパッケージ名。null 値は、「current」の無名パッケージであることを示す (『Java 言語仕様』、セクション 7.4.2)
enabled - このクラスローダーによりロードされ、名前付きパッケージまたはそのサブパッケージのどれかに属するクラスが、デフォルトで有効な宣言を保持する場合は true、デフォルトで無効な宣言を保持する場合は false
導入されたバージョン:
1.4

setClassAssertionStatus

public void setClassAssertionStatus(String className,
                                    boolean enabled)
このクラスローダーおよび内部の入れ子構造クラス内の名前付きのトップレベルクラスに対して、目的の宣言ステータスを設定します。この設定は、クラスローダーのデフォルト宣言ステータス、およびパッケージ単位で適用可能なデフォルトに優先されます。名前付きクラスが初期化済みの場合、このメソッドは無効になります(クラスの初期化後に宣言ステータスを変更することはできないため)。  

名前付きクラスがトップレベルのクラスではない場合、この呼び出しは、どのようなクラスの宣言ステータスに対しても影響を与えません。

パラメータ:
className - 宣言ステータスを設定するトップレベルのクラスの完全指定クラス名
enabled - 初期化時に、名前付きクラスで宣言を有効にする場合は true、宣言を無効にする場合は false
導入されたバージョン:
1.4

clearAssertionStatus

public void clearAssertionStatus()
このクラスローダーのデフォルト宣言ステータスを false に設定し、クラスローダーに関連付けられたデフォルトパッケージおよびクラス宣言ステータス設定をすべて破棄します。このメソッドを利用すると、クラスローダーがコマンド行または持続的な宣言ステータス設定をすべて無視するため、「クリーンな状態で」起動できます。

導入されたバージョン:
1.4

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。