JavaTM 2
Platform
Std. Ed. v1.4.0

java.lang
クラス ClassLoader

java.lang.Object
  |
  +--java.lang.ClassLoader
直系の既知のサブクラス:
SecureClassLoader

public abstract class ClassLoader
extends Object

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

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

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

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

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

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

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

ただし、ファイルから作成できないクラスもあります。このようなクラスは、ネットワークなどの他のソースから作成したり、アプリケーションが構築したりします。メソッド defineClass は、バイトの配列をクラス Class のインスタンスに変換します。新しく定義したクラスのインスタンスは、クラス ClassnewInstance を使って生成できます。

クラスローダで作成したオブジェクトのメソッドとコンストラクタは、他のクラスを参照できます。参照するクラスを判定するために、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
              . . .
         }
     }
 

導入されたバージョン:
JDK1.0
関連項目:
Class, Class.newInstance(), defineClass(byte[], int, int), loadClass(java.lang.String, boolean), resolveClass(java.lang.Class)

コンストラクタの概要
protected ClassLoader()
          getSystemClassLoader() メソッドによって返された ClassLoader を親クラスローダとして使用し、新しいクラスローダを作成します。
protected ClassLoader(ClassLoader parent)
          指定された親クラスローダを使って、委譲のために新しいクラスローダを作成します。
 
メソッドの概要
 void clearAssertionStatus()
          このクラスローダのデフォルト宣言ステータスを false に設定し、クラスローダに関連付けられたデフォルトパッケージおよびクラス宣言ステータス設定をすべて破棄します。
protected  Class defineClass(byte[] b, int off, int len)
          推奨されていません。 defineClass(java.lang.String, byte[], int, int) に置き換えられました。
protected  Class defineClass(String name, byte[] b, int off, int len)
          byte の配列を Class クラスのインスタンスに変換します。
protected  Class defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain)
          オプションの ProtectionDomain を使って、バイトの配列を 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)
          指定された名前を持つクラスがこのクラスローダによってすでにロードされている場合、そのクラスを探します。
protected  URL findResource(String name)
          指定された名前を持つリソースを探します。
protected  Enumeration findResources(String name)
          指定された名前を持つすべてのリソースを表す URL の Enumeration を返します。
protected  Class findSystemClass(String name)
          指定された名前を持つクラスを探して、必要に応じてロードします。
protected  Package getPackage(String name)
          このクラスローダかその上位オブジェクトのどれかによって定義された Package を返します。
protected  Package[] getPackages()
          このクラスローダとその上位オブジェクトによって定義されたすべての Package を返します。
 ClassLoader getParent()
          委譲のための親クラスローダを返します。
 URL getResource(String name)
          指定された名前を持つリソースを見つけます。
 InputStream getResourceAsStream(String name)
          指定されたリソースを読み込む入力ストリームを返します。
 Enumeration getResources(String name)
          指定された名前を持つすべてのリソースを探します。
static ClassLoader getSystemClassLoader()
          委譲のためのシステムクラスローダを返します。
static URL getSystemResource(String name)
          クラスをロードするために使用される検索パスから、指定された名前のリソースを探します。
static InputStream getSystemResourceAsStream(String name)
          クラスをロードするのに使用される検索パスから、指定された名前のリソースを、読み込み用にオープンします。
static Enumeration 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
関連項目:
SecurityException, SecurityManager.checkCreateClassLoader()

ClassLoader

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

このコンストラクタは、新しく作成されるクラスローダのそれぞれに対して呼び出されます。ClassLoader クラスは抽象クラスなので、ClassLoader クラス自体の新しいインスタンスを生成することはできません。ただし、ClassLoader のサブクラスの各コンストラクタは、明示的または暗黙的、直接的または間接的にかかわらず、必然的にこのコンストラクタを呼び出します。

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

例外:
SecurityException - セキュリティマネージャが存在し、その checkCreateClassLoader メソッドが新しいクラスローダの作成を許可しない場合
関連項目:
SecurityException, SecurityManager.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 のときには、このメソッドは見つかったクラスオブジェクトに対して resolveClass(Class) メソッドを呼び出します。

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

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

findClass

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

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

defineClass

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

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

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

defineClass

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

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

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

パラメータ:
name - クラスの名前として期待するもの。不明な場合は null。区切り文字には「/」ではなく「.」を使う。クラス名のあとの接尾辞「.class」は付けない
b - クラスデータを構成する byte。off から off+len-1 までの位置にある byte は、Java 仮想マシン仕様で定義される有効なクラスファイルの形式を持つ
off - クラスデータの b 内の開始オフセット
len - クラスデータの長さ
戻り値:
指定されたクラスデータから作成された Class オブジェクト
例外:
ClassFormatError - データが有効なクラスを含まなかった場合
IndexOutOfBoundsException - off または len のどちらかが負の場合、または off+lenb.length よりも大きい場合
SecurityException - このクラスとは異なる証明書セット (符号なし) を使って署名されたクラスを含むパッケージに、このクラスを追加しようとする場合、またはクラス名が「java.」で始まる場合
導入されたバージョン:
JDK1.1
関連項目:
loadClass(java.lang.String, boolean), resolveClass(java.lang.Class), ProtectionDomain, Policy, 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." で始まるクラス名を指定することはできません。名前パラメータは、null ではない場合には、バイト配列 b で指定されたクラスの名前に等しくなければなりません。等しくない場合、ClassFormatError がスローされます。

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

resolveClass

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

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

findSystemClass

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

Java 2 SDK より前では、このメソッドはローカルファイルシステムからクラスをプラットフォームに依存した方法でロードし、関連したクラスローダのないクラスオブジェクトを返します。

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

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

getParent

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

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

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

setSigners

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

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

findLoadedClass

protected final Class findLoadedClass(String name)
指定された名前を持つクラスがこのクラスローダによってすでにロードされている場合、そのクラスを探します。

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

getResource

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

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

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

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

getResources

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

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

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

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

findResources

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

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

findResource

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

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

getSystemResource

public static URL getSystemResource(String name)
クラスをロードするために使用される検索パスから、指定された名前のリソースを探します。

JDK 1.1 では、使用される検索パスは仮想マシンの組み込みクラスローダの検索パスです。

Java 2 SDK v1.2 以降は、このメソッドはシステムクラスローダ (getSystemClassLoader() を参照) を使ってリソースを見つけます。

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

getSystemResources

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

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

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

getResourceAsStream

public InputStream getResourceAsStream(String name)
指定されたリソースを読み込む入力ストリームを返します。検索順については、getResource(String) のドキュメントを参照してください。

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

getSystemResourceAsStream

public static InputStream getSystemResourceAsStream(String name)
クラスをロードするのに使用される検索パスから、指定された名前のリソースを、読み込み用にオープンします。

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

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

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() メソッドを使用して取得できる
関連項目:
SecurityManager.checkPermission(java.security.Permission), RuntimePermission

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()
このクラスローダとその上位オブジェクトによって定義されたすべての Package を返します。

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

findLibrary

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

パラメータ:
libname - ライブラリ名
戻り値:
ネイティブライブラリの絶対パス
導入されたバージョン:
1.2
関連項目:
System.loadLibrary(java.lang.String), System.mapLibraryName(java.lang.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.textjavax.swing のサブパッケージです。また、java.utiljava.lang.reflect はどちらも、java のサブパッケージです。

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

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

パラメータ:
packageName - パッケージデフォルト宣言ステータスを設定するパッケージ名。null 値は、"current" の無名パッケージであることを示す (JLS 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
Std. Ed. v1.4.0

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

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.