JavaTM 2 Platform
Standard Ed. 5.0

java.lang
クラス ClassLoader

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

public abstract class ClassLoader
extends Object

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

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

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

アプリケーションは、Java 仮想マシンが動的にクラスをロードするように拡張するため、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 までの位置にあるバイトは、『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 までの位置にあるバイトは、『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 までの位置にあるバイトは、『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
cl.defineClass(name, temp, 0, temp.length, pd);

パラメータ:
name - 予想されるバイナリ名。不明な場合は null
b - クラスデータを構成するバイト。b.position() から b.position() + b.limit() -1 までの位置にあるバイトは、『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 2 Platform
Standard Ed. 5.0

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

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