- 直系の既知のサブクラス:
SecureClassLoader
ClassLoader
クラスは抽象クラスです。 クラスのバイナリ名を指定すると、クラス・ローダーはクラスの定義を構成するデータを見つけるか生成します。 一般的な方法としては、名前をファイル名に変換して、ファイル・システムからその名前の「クラス・ファイル」を読み込みます。
すべてのClass
オブジェクトには、それを定義したClassLoader
へのreference
が含まれています。
配列クラスのClass
オブジェクトは、クラス・ローダーによっては作成されず、Java Runtimeの要求に応じて自動的に作成されます。 配列クラスのクラス・ローダー(Class.getClassLoader()
から返される)は、その要素の型のクラス・ローダーと同じになります。要素の型がプリミティブ型の場合、配列クラスはクラス・ローダーを持ちません。
アプリケーションは、Java仮想マシンが動的にクラスをロードするように拡張するために、ClassLoader
のサブクラスを実装します。
クラス・ローダーは一般的に、セキュリティ・マネージャがセキュリティ・ドメインを示すために使われます。
クラスをロードすることに加えて、クラス・ローダーはリソースの特定も担当します。 リソースとは、'/'という抽象パス名で識別されるデータです。 リソースは通常、アプリケーションまたはライブラリにパッケージ化されているため、アプリケーションまたはライブラリ内のコードでリソースを見つけることができます。 場合によっては、リソースが他のライブラリに配置されるように含まれています。
ClassLoader
クラスは、委譲モデルを使ってクラスとリソースを探します。 ClassLoader
の各インスタンスは、関連する親クラス・ローダーを持ちます。 ClassLoader
インスタンスは、クラスまたはリソースの検索をリクエストされると、そのクラスまたはリソース自体の検索を試みる前に、そのクラスまたはリソースの検索を親クラス・ローダーに委譲します。
クラスの同時ロードをサポートするクラス・ローダーは、「並列対応」クラス・ローダーと呼ばれ、ClassLoader.registerAsParallelCapable
メソッドを呼び出すことによってクラス初期化時に登録する必要があります。 ClassLoader
クラスはデフォルトで並行可能として登録されます。 ただしそのサブクラスについては、並行可能な場合には自身を登録する必要があります。 委譲モデルが厳密に階層的でない環境では、クラス・ローダーは並列対応が可能でなければなりません。そうしないと、クラス・ローディング・プロセス(loadClass
メソッドを参照してください)中にローダー・ロックが保持されるため、クラス・ローディングによってデッドロックが発生する可能性があります。
ランタイム・ビルト・イン・クラス・ローダー
Javaランタイムには、次の組み込みクラス・ローダーがあります:ブートストラップ・クラス・ローダー。 仮想マシンの組み込みクラス・ローダーで、通常は
null
で表され、親はありません。「プラットフォーム・クラス・ローダー」。 プラットフォーム・クラス・ローダーは、「プラットフォーム・クラス」のロードを担当します。 プラットフォーム・クラスには、Java SEプラットフォームAPI、その実装クラス、およびプラットフォーム・クラス・ローダーまたはその祖先によって定義されたJDK固有の実行時クラスが含まれます。 プラットフォーム・クラス・ローダーは、
ClassLoader
インスタンスの親として使用できます。プラットフォーム・クラス・ローダーに定義されたモジュールのアップグレード/オーバーライドを可能にするために、アップグレードされたモジュールが定義されたモジュールをプラットフォーム・クラス・ローダーとその祖先以外のクラス・ローダーに読み込む場合、プラットフォーム・クラス・ローダーは他のクラス・ローダーに委譲する必要があります。アプリケーション・クラス・ローダーなどがあります。 言い換えれば、プラットフォーム・クラス・ローダーとその祖先以外のクラス・ローダーに定義された名前付きモジュールのクラスは、プラットフォーム・クラス・ローダーに可視である可能性があります。
「システム・クラス・ローダー」。 「アプリケーション・クラス・ローダー」とも呼ばれ、プラットフォーム・クラス・ローダーとは異なります。 システム・クラス・ローダーは、通常、アプリケーション・クラス・パス、モジュール・パス、およびJDK固有のツールでクラスを定義するために使用されます。 プラットフォーム・クラス・ローダーはシステム・クラス・ローダーの親または祖先であるため、システム・クラス・ローダーはその親に委任することでプラットフォーム・クラスをロードできます。
通常、Java仮想マシンは、プラットフォームに依存しない方法でローカル・ファイル・システムからクラスをロードします。 ただし、ファイルから作成できないクラスもあります。このようなクラスは、ネットワークなどのほかのソースから作成したり、アプリケーションが構築したりします。 メソッドdefineClass
は、バイトの配列をクラスClass
のインスタンスに変換します。 この新たに定義されたクラスのインスタンスは、Class.newInstance
を使用して作成できます。
クラス・ローダーで作成したオブジェクトのメソッドとコンストラクタは、ほかのクラスを参照できます。 参照されるclass(es)を決定するために、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"
ClassLoader
のメソッドへのString
パラメータとして指定されたパッケージ名は、空の文字列(名前のないパッケージを示す)または「Java言語仕様」で定義された完全修飾名でなければなりません。
- Java言語仕様を参照してください:
-
6.7 完全修飾名
13.1バイナリの形式 - 導入されたバージョン:
- 1.0
- 関連項目:
-
コンストラクタのサマリー
修飾子コンストラクタ説明protected
getSystemClassLoader()
メソッドによって返されたClassLoader
を親クラス・ローダーとして使用して、新しいクラス・ローダーを作成します。protected
ClassLoader
(ClassLoader parent) 指定された親クラス・ローダーを使って、委譲のために新しいクラス・ローダーを作成します。protected
ClassLoader
(String name, ClassLoader parent) 指定された名前の新しいクラス・ローダーを作成し、指定された親クラス・ローダーを委譲のために使用します。 -
メソッドのサマリー
修飾子と型メソッド説明void
このクラス・ローダーのデフォルトのアサーション・ステータスをfalse
に設定し、クラス・ローダーに関連付けられたパッケージ・デフォルトまたはクラスのアサーション・ステータス設定をすべて破棄します。protected final Class<?>
defineClass
(byte[] b, int off, int len) 非推奨。protected final Class<?>
defineClass
(String name, byte[] b, int off, int len) バイトの配列をClass
クラスのインスタンスに変換します。protected final Class<?>
defineClass
(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain) 指定されたProtectionDomain
を使用して、バイトの配列をクラスClass
のインスタンスに変換します。protected final 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
にnameでパッケージを定義します。protected Class<?>
指定されたバイナリ名を持つクラスを探します。protected Class<?>
このクラス・ローダーに定義されたモジュール内の指定された「バイナリ名」を持つクラスを検索します。protected String
findLibrary
(String libname) ネイティブ・ライブラリの絶対パス名を返します。protected final Class<?>
findLoadedClass
(String name) protected URL
findResource
(String name) 指定された名前を持つリソースを検索します。protected URL
findResource
(String moduleName, String name) このクラス・ローダーに定義されたモジュール内のリソースへのURLを返します。protected Enumeration<URL>
findResources
(String name) 指定された名前を持つすべてのリソースを表すURL
オブジェクトの列挙型を返します。protected final Class<?>
findSystemClass
(String name) 指定されたバイナリ名を持つクラスを探して、必要に応じてロードします。protected Object
getClassLoadingLock
(String className) クラス・ロード操作用のロック・オブジェクトを返します。final Package
getDefinedPackage
(String name) このクラス・ローダーによって定義されたnameのPackage
を返します。final Package[]
このクラス・ローダーによって定義されたすべてのPackage
を返します。getName()
このクラス・ローダーの名前が返されない場合は、このクラス・ローダーの名前またはnull
を返します。protected Package
getPackage
(String name) 非推奨。複数のクラス・ローダーが互いに委譲して同じパッケージ名を持つクラスを定義し、そのようなローダーの1つがgetPackage
のルックアップ動作に依存して親ローダーからPackage
を返す場合、Package
によって公開されるプロパティは残りのプログラムで期待どおりにならない場合があります。protected Package[]
このクラス・ローダーとその祖先によって定義されたすべてのPackage
を返します。final ClassLoader
委譲のための親クラス・ローダーを返します。static ClassLoader
プラットフォーム・クラス・ローダーを返します。getResource
(String name) 指定された名前を持つリソースを検索します。getResourceAsStream
(String name) 指定されたリソースを読み込む入力ストリームを返します。getResources
(String name) 指定された名前を持つすべてのリソースを検索します。static ClassLoader
システム・クラス・ローダーを返します。static URL
getSystemResource
(String name) クラスをロードするために使用される検索パスから、指定された名前のリソースを探します。static InputStream
クラスをロードするのに使用される検索パスから、指定された名前のリソースを、読込み用にオープンします。static Enumeration<URL>
getSystemResources
(String name) クラスをロードするために使用される検索パスから、指定された名前のすべてのリソースを探します。final Module
このクラス・ローダーの名前のないModule
を返します。final boolean
このクラス・ローダーが「並列対応」、それ以外の場合はfalse
として登録されている場合はtrue
を返します。Class<?>
指定されたバイナリ名を持つクラスをロードします。protected Class<?>
指定されたバイナリ名を持つクラスをロードします。protected static boolean
呼び出し元を「並列対応」として登録します。protected final void
resolveClass
(Class<?> c) 指定されたクラスをリンクします。要素が指定された名前を持つすべてのリソースのURLであるストリームを返します。void
setClassAssertionStatus
(String className, boolean enabled) このクラス・ローダーの指定されたトップレベル・クラスおよびそこに含まれるネストされたクラス内に対して、目的のアサーション・ステータスを設定します。void
setDefaultAssertionStatus
(boolean enabled) このクラス・ローダーのデフォルトのアサーション・ステータスを設定します。void
setPackageAssertionStatus
(String packageName, boolean enabled) 指定されたパッケージ・デフォルトのアサーション・ステータスを設定します。protected final void
setSigners
(Class<?> c, Object[] signers) クラスの署名者を設定します。
-
コンストラクタの詳細
-
ClassLoader
protected ClassLoader(String name, ClassLoader parent) 指定された名前の新しいクラス・ローダーを作成し、指定された親クラス・ローダーを委譲のために使用します。- APIのノート:
- 親が
null
(ブートストラップ・クラス・ローダー用)として指定されている場合、すべてのプラットフォーム・クラスが可視であるという保証はありません。 - パラメータ:
name
- クラス・ローダー名;名前が付けられていない場合はnull
parent
- 親クラス・ローダー- 例外:
IllegalArgumentException
- 指定された名前が空の場合。SecurityException
- セキュリティ・マネージャが存在し、そのSecurityManager.checkCreateClassLoader()
メソッドが新しいクラス・ローダーの作成を許可しない場合。- 導入されたバージョン:
- 9
-
ClassLoader
protected ClassLoader(ClassLoader parent) 指定された親クラス・ローダーを使って、委譲のために新しいクラス・ローダーを作成します。セキュリティ・マネージャが存在する場合、その
checkCreateClassLoader
メソッドが呼び出されます。 これはセキュリティ例外となる場合があります。- APIのノート:
- 親が
null
(ブートストラップ・クラス・ローダー用)として指定されている場合、すべてのプラットフォーム・クラスが可視であるという保証はありません。 - パラメータ:
parent
- 親クラス・ローダー- 例外:
SecurityException
- セキュリティ・マネージャが存在し、そのcheckCreateClassLoader
メソッドが新しいクラス・ローダーの作成を許可しない場合- 導入されたバージョン:
- 1.2
-
ClassLoader
protected ClassLoader()getSystemClassLoader()
メソッドによって返されたClassLoader
を親クラス・ローダーとして使用して、新しいクラス・ローダーを作成します。セキュリティ・マネージャが存在する場合、その
checkCreateClassLoader
メソッドが呼び出されます。 これはセキュリティ例外となる場合があります。- 例外:
SecurityException
- セキュリティ・マネージャが存在し、そのcheckCreateClassLoader
メソッドが新しいクラス・ローダーの作成を許可しない場合
-
-
メソッドの詳細
-
getName
public String getName()このクラス・ローダーの名前が返されない場合は、このクラス・ローダーの名前またはnull
を返します。- APIのノート:
- このメソッドは、互換性のために最終的なものではありません。 このメソッドがオーバーライドされている場合、このメソッドは、このクラス・ローダーがインスタンス化されたときに指定されたものと同じ名前を返す必要があります。
- 戻り値:
- このクラス・ローダーの名前。このクラス・ローダーが指定されていない場合は
null
。 - 導入されたバージョン:
- 9
-
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 指定されたバイナリ名を持つクラスをロードします。 このメソッドのデフォルト実装では、次の順序でクラスを検索します。クラスがすでにロードされていないかチェックするために
findLoadedClass(String)
を呼び出す。親クラス・ローダーで
loadClass
メソッドを呼び出します。 親がnull
の場合、代わりに仮想マシンに組み込まれたクラス・ローダーが使用されます。findClass(String)
メソッドを呼び出してクラスを探す。
上記のステップでクラスが見つかった場合、
resolve
フラグがtrueのときには、このメソッドは見つかったClass
オブジェクトに対してresolveClass(Class)
メソッドを呼び出します。ClassLoader
のサブクラスでは、このメソッドではなくfindClass(String)
をオーバーライドすることをお薦めします。オーバーライドされていない限り、このメソッドはクラス・ロード処理全体の中で
getClassLoadingLock
メソッドの結果と同期します。- パラメータ:
name
- クラスのバイナリ名resolve
-true
の場合は、クラスを解決する- 戻り値:
- 結果として得られる
Class
オブジェクト - 例外:
ClassNotFoundException
- クラスが見つからなかった場合
-
getClassLoadingLock
クラス・ロード操作用のロック・オブジェクトを返します。 下位互換性のため、このメソッドのデフォルト実装は次のように動作します。 このClassLoaderオブジェクトが並行可能として登録されている場合、このメソッドは、指定されたクラス名に関連付けられた専用オブジェクトを返します。 それ以外の場合、メソッドはこのClassLoaderオブジェクトを返します。- パラメータ:
className
- ロードするクラスの名前- 戻り値:
- クラス・ロード処理用のロック
- 例外:
NullPointerException
- 並行可能として登録されていて、className
がnullの場合- 導入されたバージョン:
- 1.7
- 関連項目:
-
findClass
protected Class<?> findClass(String name) throws ClassNotFoundException 指定されたバイナリ名を持つクラスを探します。 このメソッドは、クラスをロードするための委譲モデルに続くクラス・ローダー実装によってオーバーライドされ、リクエストされたクラスの親クラス・ローダーをチェックした後にloadClass
メソッドによって呼び出されます。- 実装要件:
- デフォルトの実装では、
ClassNotFoundException
がスローされます。 - パラメータ:
name
- クラスのバイナリ名- 戻り値:
- 結果として得られる
Class
オブジェクト - 例外:
ClassNotFoundException
- クラスが見つからなかった場合- 導入されたバージョン:
- 1.2
-
findClass
このクラス・ローダーに定義されたモジュール内の指定された「バイナリ名」を持つクラスを検索します。 モジュールからのロードをサポートするクラス・ローダー実装は、このメソッドをオーバーライドする必要があります。- APIのノート:
- このメソッドは、クラスが見つからない場合は
ClassNotFoundException
をスローするのではなく、null
を返します。 - 実装要件:
moduleName
がnull
のとき、findClass(String)
を呼び出すことによって、デフォルトの実装がクラスを見つけようとします。 そうでなければ、null
を返します。- パラメータ:
moduleName
- モジュール名。またはnull
を使用して、このクラス・ローダーの「名前のないモジュール」内のクラスを見つけますname
- クラスのバイナリ名- 戻り値:
- 結果の
Class
オブジェクト、またはクラスが見つからなかった場合はnull
オブジェクト。 - 導入されたバージョン:
- 9
-
defineClass
@Deprecated(since="1.1") protected final Class<?> defineClass(byte[] b, int off, int len) throws ClassFormatError 非推奨。defineClass(String, byte[], int, int)
に置き換えられましたバイトの配列をClass
クラスのインスタンスに変換します。 最初にClass
を解決してからでなければ、それを使用することはできません。 このメソッドは非推奨です。バイナリ名を最初の引数として取るバージョンの方が安全であるため、そのバージョンを使用するようにしてください。- パラメータ:
b
- クラス・データを構成するバイト。off+len-1
を介したoff
の位置のバイトは、「Java Virtual Machine仕様」で定義されている有効なクラス・ファイルの形式である必要があります。off
- クラス・データのb
内での開始オフセットlen
- クラス・データの長さ- 戻り値:
- 指定されたクラス・データから作成された
Class
オブジェクト - 例外:
ClassFormatError
- データが有効なクラスを含まなかった場合IndexOutOfBoundsException
-off
またはlen
が負の場合、またはoff+len
がb.length
より大きい場合SecurityException
- このクラスとは異なる一連の証明書で署名されたクラスを含むパッケージにこのクラスを追加しようとした場合、または「java.
」で始まる完全指定名を持つパッケージ内でクラスを定義しようとした場合。- 関連項目:
-
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
をクラスに割り当てるには、引数の1つとしてProtectionDomain
を取るdefineClass
メソッドを使用します。このメソッドは、
Class
(そのようなパッケージがこのクラス・ローダーでまだ定義されていない場合)のパッケージに対応するこのクラス・ローダー内のパッケージを定義します。 定義されたパッケージの名前は、バイト配列b
で指定されたクラスの「バイナリ名」から派生します。 定義されたパッケージのその他のプロパティは、Package
で指定されたものです。- パラメータ:
name
- クラスの予想されるバイナリ名。不明な場合はnull
b
- クラス・データを構成するバイト。off+len-1
を介したoff
の位置のバイトは、「Java Virtual Machine仕様」で定義されている有効なクラス・ファイルの形式である必要があります。off
- クラス・データのb
内での開始オフセットlen
- クラス・データの長さ- 戻り値:
- 指定されたクラス・データから作成された
Class
オブジェクト。 - 例外:
ClassFormatError
- データが有効なクラスを含まなかった場合IndexOutOfBoundsException
-off
またはlen
が負の場合、またはoff+len
がb.length
より大きい場合SecurityException
- このクラス(未署名)とは異なる証明書セットを使って署名されたクラスを含むパッケージに、このクラスを追加しようとした場合、またはname
が「java.
」で始まる場合。- 導入されたバージョン:
- 1.1
- 関連項目:
-
defineClass
protected final Class<?> defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain) throws ClassFormatError 指定されたProtectionDomain
を使用して、バイトの配列をクラスClass
のインスタンスに変換します。指定された
ProtectionDomain
がnull
の場合、defineClass(String, byte[], int, int)
のドキュメントで指定されているように、デフォルトの保護ドメインがクラスに割り当てられます。 最初にクラスを解決してからでなければ、クラスを使用することはできません。パッケージで定義される最初のクラスにより、そのパッケージ内で続いて定義されたすべてのクラスに必要な、証明書の正確なセットが決まります。 クラスの証明書セットは、クラスの
ProtectionDomain
内のCodeSource
から取得されます。 そのパッケージに追加されたクラスには同一の証明書のセットが含まれている必要があり、含まれていない場合はSecurityException
がスローされます。name
がnull
の場合、この判別は実行されません。 必ず、定義するクラスのバイナリ名をバイトとともに渡すようにしてください。 このようにして渡すと、定義するクラスは実際に考えたとおりのクラスになります。指定された
name
が"java.
"で始まる場合は、「プラットフォーム・クラス・ローダー」またはその祖先でのみ定義できます。それ以外の場合はSecurityException
がスローされます。name
がnull
でない場合は、バイト配列b
で指定されたクラスの「バイナリ名」と等しくなければなりません。それ以外の場合はNoClassDefFoundError
がスローされます。このメソッドは、
Class
(そのようなパッケージがこのクラス・ローダーでまだ定義されていない場合)のパッケージに対応するこのクラス・ローダー内のパッケージを定義します。 定義されたパッケージの名前は、バイト配列b
で指定されたクラスの「バイナリ名」から派生します。 定義されたパッケージのその他のプロパティは、Package
で指定されたものです。- パラメータ:
name
- クラスの予想されるバイナリ名。不明な場合はnull
b
- クラス・データを構成するバイト。off+len-1
を介したoff
の位置のバイトは、「Java Virtual Machine仕様」で定義されている有効なクラス・ファイルの形式である必要があります。off
- クラス・データのb
内での開始オフセットlen
- クラス・データの長さprotectionDomain
- クラスのProtectionDomain
- 戻り値:
- データから作成された
Class
オブジェクトとProtectionDomain
。 - 例外:
ClassFormatError
- データが有効なクラスを含まなかった場合NoClassDefFoundError
-name
がnull
でなく、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
のインスタンスに変換します。 指定されたProtectionDomain
が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);
returncl.defineClass
(name, temp, 0, temp.length, pd);
- パラメータ:
name
- クラスの予想されるバイナリ名。不明な場合はnull
b
- クラス・データを構成するバイト。b.position()
からb.position() + b.limit() -1
までの位置のバイトは、「Java Virtual Machine仕様」で定義されている有効なクラス・ファイルの形式である必要があります。protectionDomain
- クラスのProtectionDomain
、またはnull
。- 戻り値:
- データから作成された
Class
オブジェクトとProtectionDomain
。 - 例外:
ClassFormatError
- データが有効なクラスを含まなかった場合。NoClassDefFoundError
-name
がnull
でなく、b
で指定されたクラスの「バイナリ名」と等しくない場合SecurityException
- このクラスとは異なる証明書セットを使って署名されたクラスを含むパッケージに、このクラスを追加しようとする場合、またはname
が「java.
」で始まる場合。- 導入されたバージョン:
- 1.5
- 関連項目:
-
resolveClass
protected final void resolveClass(Class<?> c) 指定されたクラスをリンクします。 クラス・ローダーはこのメソッドを使って、クラスをリンクします。c
クラスがすでにリンクされている場合、このメソッドは単に復帰します。 それ以外の場合、クラスは「Java言語仕様」の"実行"の章で説明されているようにリンクされます。- パラメータ:
c
- リンクするクラス- 例外:
NullPointerException
-c
がnull
の場合。- 関連項目:
-
findSystemClass
protected final Class<?> findSystemClass(String name) throws ClassNotFoundException 指定されたバイナリ名を持つクラスを探して、必要に応じてロードします。このメソッドはシステム・クラス・ローダー(
getSystemClassLoader()
を参照)を使ってそのクラスをロードします。 返されるClass
オブジェクトは、そのオブジェクトに関連付けられたClassLoader
を1つ以上持つ場合があります。ClassLoader
のサブクラスでは通常、このメソッドを呼び出す必要はありません。これは、ほとんどのクラス・ローダーではfindClass(String)
だけをオーバーライドすればよいからです。- パラメータ:
name
- クラスのバイナリ名- 戻り値:
- 指定された
name
のClass
オブジェクト - 例外:
ClassNotFoundException
- クラスが見つからなかった場合- 関連項目:
-
findLoadedClass
- パラメータ:
name
- クラスのバイナリ名- 戻り値:
Class
オブジェクト。クラスがロードされていない場合はnull
- 導入されたバージョン:
- 1.1
-
setSigners
クラスの署名者を設定します。 このメソッドは、クラスの定義後に呼び出す必要があります。- パラメータ:
c
-Class
オブジェクトsigners
- クラスの署名者- 導入されたバージョン:
- 1.1
-
findResource
protected URL findResource(String moduleName, String name) throws IOException このクラス・ローダーに定義されたモジュール内のリソースへのURLを返します。 モジュールからのロードをサポートするクラス・ローダー実装は、このメソッドをオーバーライドする必要があります。- APIのノート:
- このメソッドは、
Class.getResource
、Class.getResourceAsStream
、およびModule.getResourceAsStream
メソッドの基礎となります。Module.getResourceAsStream
で指定されたカプセル化の規則の対象ではありません。 - 実装要件:
moduleName
がnull
のとき、findResource(String)
を呼び出すことによって、デフォルトの実装はリソースを見つけようとします。 そうでなければ、null
を返します。- パラメータ:
moduleName
- モジュール名。またはnull
を使用して、このクラス・ローダーの「名前のないモジュール」内のリソースを検索name
- リソース名- 戻り値:
- リソースへのURL; リソースが見つからない場合、URLを構築してリソースを見つけることができなかった場合、リソースへのアクセスがセキュリティ・マネージャによって拒否された場合、または指定された名前のモジュールがクラス・ローダーに定義されていない場合、
null
。 - 例外:
IOException
- 入出力エラーが発生した場合- 導入されたバージョン:
- 9
- 関連項目:
-
getResource
指定された名前を持つリソースを検索します。 リソースは、クラス・コードからコード位置に依存しない方法でアクセス可能なデータ(イメージ、オーディオ、テキストなど)です。リソースの名前は、「
/
」で区切られたパス名であり、これによってリソースが識別されます。名前付きモジュールのリソースは、
Module.getResourceAsStream
で指定されたカプセル化ルールの影響を受けます。 さらに、リソースが".class
"で終わる名前を持つ特殊な場合を除いて、このメソッドは、パッケージがopened
無条件で(このメソッドの呼び出し元がリソースと同じモジュール内にあっても)である場合にのみ、名前付きモジュールのパッケージ内のリソースを検索します。- APIのノート:
- いくつかのモジュールが同じクラス・ローダーに定義され、複数のモジュールが指定された名前のリソースを含む場合、モジュールが検索される順序は指定されておらず、非常に予測不能な場合があります。 このメソッドをオーバーライドするときは、実装によっていずれかの委譲が
getResources(String)
メソッドと確実に一致するようになることをお薦めします。 - 実装要件:
- デフォルトの実装では、最初にリソースの親クラス・ローダーを検索します。親が
null
の場合、仮想マシンに組み込まれているクラス・ローダーのパスが検索されます。 見つからなければ、このメソッドはfindResource(String)
を呼び出してリソースを探します。 - パラメータ:
name
- リソース名- 戻り値:
- リソースを読み取るための
URL
オブジェクト。null
リソースが見つからなかった場合、リソースを見つけるためにURL
を構築できなかったか、リソースが無条件に開かれていないパッケージに入っているか、リソースへのアクセスがセキュリティ・マネージャによって拒否されました。 - 例外:
NullPointerException
-name
がnull
である場合- 導入されたバージョン:
- 1.1
-
getResources
public Enumeration<URL> getResources(String name) throws IOException 指定された名前を持つすべてのリソースを検索します。 リソースは、クラス・コードからコード位置に依存しない方法でアクセス可能なデータ(イメージ、オーディオ、テキストなど)です。リソースの名前は、
/
で区切られたパス名であり、これによってリソースが識別されます。名前付きモジュールのリソースは、
Module.getResourceAsStream
で指定されたカプセル化ルールの影響を受けます。 さらに、リソースが".class
"で終わる名前を持つ特殊な場合を除いて、このメソッドは、パッケージがopened
無条件で(このメソッドの呼び出し元がリソースと同じモジュール内にあっても)である場合にのみ、名前付きモジュールのパッケージ内のリソースを検索します。- APIのノート:
- 複数のモジュールが同じクラス・ローダーに定義され、複数のモジュールが指定された名前のリソースを含む場合、順序は指定されず、非常に予測できない場合があります。 このメソッドをオーバーライドするときは、実装によっていずれかの委譲が
getResource(String)
メソッドと確実に一致するようになることをお薦めします。 これにより、列挙のnextElement
メソッドから返される最初の要素が必ず、getResource(String)
メソッドが返すリソースと同じものになるはずです。 - 実装要件:
- デフォルトの実装では、最初にリソースの親クラス・ローダーを検索します。親が
null
の場合、仮想マシンに組み込まれているクラス・ローダーのパスが検索されます。 次に、findResources(String)
を呼び出して、このクラス・ローダー内の名前のリソースを検索します。 親クラス・ローダーを検索した後にfindResources
で見つかった要素が検索されたURLを要素とする列挙を返します。 - パラメータ:
name
- リソース名- 戻り値:
- リソースの
URL
オブジェクトの列挙型。 リソースが見つからなかった場合、列挙は空になる。URL
を構築できないリソースが、無条件でオープンされていないパッケージに含まれているか、リソースへのアクセスがセキュリティ・マネージャによって拒否され、列挙型に返されません。 - 例外:
IOException
- 入出力エラーが発生した場合NullPointerException
-name
がnull
である場合- 導入されたバージョン:
- 1.2
-
resources
要素が指定された名前を持つすべてのリソースのURLであるストリームを返します。 リソースは、クラス・コードからコード位置に依存しない方法でアクセス可能なデータ(イメージ、オーディオ、テキストなど)です。リソースの名前は、
/
で区切られたパス名であり、これによってリソースが識別されます。リソースは、返されたストリームが評価されるときに配置されます。 評価結果が
IOException
の場合、I/O例外はスローされるUncheckedIOException
にラップされます。名前付きモジュールのリソースは、
Module.getResourceAsStream
で指定されたカプセル化ルールの影響を受けます。 さらに、リソースが".class
"で終わる名前を持つ特殊な場合を除いて、このメソッドは、パッケージがopened
無条件で(このメソッドの呼び出し元がリソースと同じモジュール内にあっても)である場合にのみ、名前付きモジュールのパッケージ内のリソースを検索します。- APIのノート:
- このメソッドをオーバーライドするときは、実装によっていずれかの委譲が
getResource(String)
メソッドと確実に一致するようになることをお薦めします。 これにより、ストリームによって返される最初の要素が、getResource(String)
メソッドが返すものと同じリソースであることが保証されます。 - 実装要件:
- デフォルトの実装では、
getResources
を呼び出して、指定された名前を持つすべてのリソースを検索し、列挙内の要素をソースとして持つストリームを返します。 - パラメータ:
name
- リソース名- 戻り値:
- リソース
URL
オブジェクトのストリーム。 リソースが見つからない場合、ストリームは空になります。URL
を構築できないリソースが、無条件に開かれないパッケージ内にあるか、セキュリティ・マネージャによってリソースへのアクセスが拒否され、ストリームに存在しません。 - 例外:
NullPointerException
-name
がnull
である場合- 導入されたバージョン:
- 9
-
findResource
指定された名前を持つリソースを検索します。 クラス・ローダーの実装は、このメソッドをオーバーライドする必要があります。名前付きモジュールのリソースの場合、メソッドは
Module
getResourceAsStream
メソッドで指定されたカプセル化のルールを実装する必要があります。 さらに、パッケージがopened
を無条件に指定していない限り、名前付きモジュールのパッケージ内に非".class
"リソースを見つけることはできません。- 実装要件:
- デフォルトの実装では
null
を返します。 - パラメータ:
name
- リソース名- 戻り値:
- リソースを読み取るための
URL
オブジェクト。null
リソースが見つからなかった場合、リソースを見つけるためにURL
を構築できなかったか、リソースが無条件に開かれていないパッケージに入っているか、リソースへのアクセスがセキュリティ・マネージャによって拒否されました。 - 導入されたバージョン:
- 1.2
-
findResources
protected Enumeration<URL> findResources(String name) throws IOException 指定された名前を持つすべてのリソースを表すURL
オブジェクトの列挙型を返します。 クラス・ローダーの実装は、このメソッドをオーバーライドする必要があります。名前付きモジュールのリソースの場合、メソッドは
Module
getResourceAsStream
メソッドで指定されたカプセル化のルールを実装する必要があります。 さらに、パッケージがopened
を無条件に指定していない限り、名前付きモジュールのパッケージ内に非".class
"リソースを見つけることはできません。- 実装要件:
- デフォルトの実装は、要素を含まない列挙型を返します。
- パラメータ:
name
- リソース名- 戻り値:
- リソースの
URL
オブジェクトの列挙型。 リソースが見つからなかった場合、列挙は空になる。URL
を構築できないリソースが、無条件でオープンされていないパッケージに含まれているか、リソースへのアクセスがセキュリティ・マネージャによって拒否され、列挙型に返されません。 - 例外:
IOException
- 入出力エラーが発生した場合- 導入されたバージョン:
- 1.2
-
registerAsParallelCapable
protected static boolean registerAsParallelCapable()呼び出し元を「並列対応」として登録します。 登録が成功するのは、次の条件をすべて満たす場合だけです。- 呼出し元のインスタンスが1つも作成されていない
- 呼出し元のすべてのスーパー・クラス(Objectクラスは除く)が並行可能として登録されている
いったんクラス・ローダーを並行可能として登録すると、それを元に戻す方法はありません。
- 戻り値:
true
(呼び出し側が正常に機能するように登録されている場合)およびfalse
(そうでない場合)。- 導入されたバージョン:
- 1.7
- 関連項目:
-
isRegisteredAsParallelCapable
public final boolean isRegisteredAsParallelCapable()このクラス・ローダーが「並列対応」、それ以外の場合はfalse
として登録されている場合はtrue
を返します。- 戻り値:
- このクラス・ローダーがパラレルに対応している場合は
true
、そうでない場合はfalse
。 - 導入されたバージョン:
- 9
- 関連項目:
-
getSystemResource
クラスをロードするために使用される検索パスから、指定された名前のリソースを探します。 このメソッドはシステム・クラス・ローダー(getSystemClassLoader()
を参照)を使ってリソースを見つけます。名前付きモジュールのリソースは、
Module.getResourceAsStream
で指定されたカプセル化ルールの影響を受けます。 さらに、リソースが".class
"で終わる名前を持つ特殊な場合を除いて、このメソッドは、パッケージが無条件でopened
の場合にのみ、名前付きモジュールのパッケージ内のリソースを検索します。- パラメータ:
name
- リソース名- 戻り値:
- リソースへの
URL
;null
リソースが見つからない場合、リソースを見つけるためのURLを構築できなかった場合、リソースが無条件に開かれていないパッケージにある場合、またはリソースへのアクセスがセキュリティ・マネージャによって拒否された場合。 - 導入されたバージョン:
- 1.1
-
getSystemResources
public static Enumeration<URL> getSystemResources(String name) throws IOException クラスをロードするために使用される検索パスから、指定された名前のすべてのリソースを探します。 このようにして見つかったリソースは、URL
オブジェクトのEnumeration
として返されます。検索順については、
getSystemResource(String)
のドキュメントを参照してください。名前付きモジュールのリソースは、
Module.getResourceAsStream
で指定されたカプセル化ルールの影響を受けます。 さらに、リソースが".class
"で終わる名前を持つ特殊な場合を除いて、このメソッドは、パッケージが無条件でopened
の場合にのみ、名前付きモジュールのパッケージ内のリソースを検索します。- パラメータ:
name
- リソース名- 戻り値:
- リソースの
URL
オブジェクトの列挙型。 リソースが見つからなかった場合、列挙は空になる。URL
を構築できないリソースが、無条件でオープンされていないパッケージに含まれているか、リソースへのアクセスがセキュリティ・マネージャによって拒否され、列挙型に返されません。 - 例外:
IOException
- 入出力エラーが発生した場合- 導入されたバージョン:
- 1.2
-
getResourceAsStream
public InputStream getResourceAsStream(String name) 指定されたリソースを読み込む入力ストリームを返します。検索順については、
getResource(String)
のドキュメントを参照してください。名前付きモジュールのリソースは、
Module.getResourceAsStream
で指定されたカプセル化ルールの影響を受けます。 さらに、リソースが".class
"で終わる名前を持つ特殊な場合を除いて、このメソッドは、パッケージが無条件でopened
の場合にのみ、名前付きモジュールのパッケージ内のリソースを検索します。- パラメータ:
name
- リソース名- 戻り値:
- リソースを読み込むための入力ストリーム。
null
リソースが見つからない場合、リソースが無条件に開かれていないパッケージ内にある場合、またはリソースへのアクセスがセキュリティ・マネージャによって拒否された場合。 - 例外:
NullPointerException
-name
がnull
である場合- 導入されたバージョン:
- 1.1
-
getSystemResourceAsStream
public static InputStream getSystemResourceAsStream(String name) クラスをロードするのに使用される検索パスから、指定された名前のリソースを、読込み用にオープンします。 このメソッドはシステム・クラス・ローダー(getSystemClassLoader()
を参照)を使ってリソースを見つけます。名前付きモジュールのリソースは、
Module.getResourceAsStream
で指定されたカプセル化ルールの影響を受けます。 さらに、リソースが".class
"で終わる名前を持つ特殊な場合を除いて、このメソッドは、パッケージが無条件でopened
の場合にのみ、名前付きモジュールのパッケージ内のリソースを検索します。- パラメータ:
name
- リソース名- 戻り値:
- リソースを読み込むための入力ストリーム。
null
リソースが見つからない場合、リソースが無条件に開かれていないパッケージ内にある場合、またはリソースへのアクセスがセキュリティ・マネージャによって拒否された場合。 - 導入されたバージョン:
- 1.1
-
getParent
public final ClassLoader getParent()委譲のための親クラス・ローダーを返します。 実装によっては、null
を使ってブートストラップ・クラス・ローダーを表すこともできます。 このメソッドは、このクラス・ローダーの親がブートストラップ・クラス・ローダーの場合に、そのような実装でnull
を返します。- 戻り値:
- 親の
ClassLoader
- 例外:
SecurityException
- セキュリティ・マネージャが存在し、呼び出し側クラス・ローダーがnull
でなく、このクラス・ローダーの祖先ではなく、呼び出し元にRuntimePermission
("getClassLoader")
がない場合- 導入されたバージョン:
- 1.2
-
getUnnamedModule
public final Module getUnnamedModule()このクラス・ローダーの名前のないModule
を返します。- 戻り値:
- このクラス・ローダーの無名Module
- 導入されたバージョン:
- 9
- 関連項目:
-
getPlatformClassLoader
public static ClassLoader getPlatformClassLoader()プラットフォーム・クラス・ローダーを返します。 すべての「プラットフォーム・クラス」は、プラットフォーム・クラス・ローダーに表示されます。- 実装上のノート:
- 組み込みプラットフォーム・クラス・ローダーの名前は
"platform"
です。 - 戻り値:
- プラットフォーム
ClassLoader
。 - 例外:
SecurityException
- セキュリティ・マネージャが存在し、呼び出し元クラス・ローダーがnull
ではなく、呼び出し元クラス・ローダーがプラットフォーム・クラス・ローダーの祖先と同じでも祖先でもなく、呼び出し元にRuntimePermission
("getClassLoader")
がない場合- 導入されたバージョン:
- 9
-
getSystemClassLoader
public static ClassLoader getSystemClassLoader()システム・クラス・ローダーを返します。 これは、新しいClassLoader
インスタンスのデフォルトの委譲の親で、通常、アプリケーションを起動するためのクラス・ローダーです。このメソッドは、ランタイム起動シーケンスの早い段階で最初に呼び出されます。その時点で、システム・クラス・ローダーが作成されます。 このクラス・ローダーは、メイン・アプリケーション・スレッド(たとえば、メイン・クラスの
main
メソッドを呼び出すスレッド)のコンテキスト・クラス・ローダーになります。デフォルトのシステム・クラス・ローダーは、このクラスの実装依存インスタンスです。
このメソッドが最初に呼び出されたときにシステム・プロパティ"
java.system.class.loader
"が定義されている場合、このプロパティの値はシステム・クラス・ローダーとして返されるクラスの名前になります。 また、このクラスは、委譲の親として使用される、ClassLoader
型の単一のパラメータを取るpublicコンストラクタを定義する必要があります。 次に、このコンストラクタを使用し、デフォルトのシステム・クラス・ローダーをパラメータに指定して、インスタンスが作成されます。 結果として得られるクラス・ローダーは、システム・クラス・ローダーとして定義されます。 構築中、クラス・ローダーはgetSystemClassLoader()
を呼び出さないように十分注意しなければなりません。 システム・クラス・ローダーの循環初期化が検出されると、IllegalStateException
がスローされます。- 実装上のノート:
- システム・クラス・ローダーをオーバーライドするシステム・プロパティは、VMがほぼ完全に初期化されるまで検査されません。 起動時にこのメソッドを実行するコードは、システムが完全に初期化されるまで戻り値をキャッシュしないように注意してください。
組み込みシステム・クラス・ローダーの名前は
"app"
です。 VMの初期化中にシステム・プロパティ"java.class.path
"が読み取られ、クラス・パスが決定されます。 "java.class.path
"プロパティの空の値は、初期モジュール(メイン・クラスを含むモジュール)の名前が付いているか、名前がないかによって、異なる方法で解釈されます: 名前付きの場合、組込みシステム・クラス・ローダーにはクラス・パスがなく、アプリケーション・モジュール・パスを使用してクラスおよびリソースを検索します。そうでない場合、名前がない場合は現在の作業ディレクトリへのクラス・パスが設定されます。クラス・パス上のJARファイルには、クラス・パスに含める依存JARファイルを指定するための
Class-Path
マニフェスト属性が含まれる場合があります。Class-Path
エントリは、(詳細は、「JARファイルの仕様」を参照してください。)の妥当性について特定の条件を満たしている必要があります。 無効なClass-Path
エントリは無視されます。 デバッグの目的で、jdk.net.URLClassPath.showIgnoredClassPathEntries
システム・プロパティがtrue
に設定されている場合、無視されたエントリをコンソールに出力できます。 - 戻り値:
- システム
ClassLoader
- 例外:
SecurityException
- セキュリティ・マネージャが存在し、呼び出し側クラス・ローダーがnull
でなく、システム・クラス・ローダーの祖先と同じでも祖先でもなく、呼び出し元にRuntimePermission
("getClassLoader")
がない場合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) このClassLoader
にnameでパッケージを定義します。「パッケージ名」はクラス・ローダー内で一意でなければならず、一度作成すると再定義または変更することはできません。
クラス・ローダーがバージョン情報などの特定のプロパティを持つパッケージを定義したい場合、クラス・ローダーは
defineClass
を呼び出す前にこのdefinePackage
メソッドを呼び出す必要があります。 それ以外の場合、defineClass
メソッドは、新しく定義されたクラスのパッケージに対応するこのクラス・ローダー内のパッケージを定義します。この定義されたパッケージのプロパティはPackage
によって指定されます。- APIのノート:
- JARのクラスのパッケージを定義したいクラス・ローダーは、通常、JARマニフェストの仕様と実装のタイトル、バージョン、およびベンダーを使用します。 パッケージがJARマニフェストでsealedとして指定されている場合、JARファイルの
URL
は通常sealBase
として使用されます。 このクラス・ローダーによって定義されたパッケージ'p'
のクラスが複数のJARからロードされている場合、Package
オブジェクトには、定義されたパッケージ'p'
の最初のクラスおよび最初に読み込まれるパッケージ'p'
のJARマニフェストによって異なる情報が含まれます。クラス・ローダーは、「名前付きモジュール」内のパッケージを明示的に定義するためにこのメソッドを呼び出さないことを強く推奨します。代わりに、クラスが「定義されている」のときにパッケージが自動的に定義されます。
Package
を明示的に定義することが望ましい場合は、名前付きモジュールのすべてのパッケージがPackage
で指定されたプロパティで定義されていることを確認する必要があります。 さもなければ、名前付きモジュール内のいくつかのPackage
オブジェクトは、例えば、異なるシール・ベースでシールされてもよい。 - パラメータ:
name
- 「パッケージ名」specTitle
- 仕様のタイトルspecVersion
- 仕様のバージョンspecVendor
- 仕様のベンダーimplTitle
- 実装のタイトルimplVersion
- 実装のバージョンimplVendor
- 実装のベンダーsealBase
-null
でない場合、このパッケージは指定されたコード・ソースURL
オブジェクトに関して密封されます。 そうでない場合、パッケージはシールされない- 戻り値:
- 新しく定義された
Package
オブジェクト - 例外:
NullPointerException
-name
がnull
の場合。IllegalArgumentException
- 指定されたname
のパッケージがこのクラス・ローダーによってすでに定義されている場合- Java Virtual Machine仕様を参照してください:
-
5.3 作成およびロード
- 導入されたバージョン:
- 1.2
- 関連項目:
-
getDefinedPackage
このクラス・ローダーによって定義されたnameのPackage
を返します。- パラメータ:
name
- 「パッケージ名」- 戻り値:
- このクラス・ローダーによって定義された指定された名前の
Package
、または見つからなければnull
- 例外:
NullPointerException
-name
がnull
の場合。- Java Virtual Machine仕様を参照してください:
-
5.3 作成およびロード
- 導入されたバージョン:
- 9
-
getDefinedPackages
public final Package[] getDefinedPackages()このクラス・ローダーによって定義されたすべてのPackage
を返します。 返される配列には、同じ名前の重複したPackage
がありません。- APIのノート:
- このメソッドは、既存の
getPackages()
メソッドとの一貫性のために、Set
またはStream
ではなく配列を返します。 - 戻り値:
- このクラス・ローダーによって定義された
Package
オブジェクトの配列。このクラス・ローダーによってパッケージが定義されていない場合は、長さがゼロの配列を返します。 - Java Virtual Machine仕様を参照してください:
-
5.3 作成およびロード
- 導入されたバージョン:
- 9
-
getPackage
@Deprecated(since="9") protected Package getPackage(String name) 非推奨。複数のクラス・ローダーが互いに委譲して同じパッケージ名を持つクラスを定義し、そのようなローダーの1つがgetPackage
のルックアップ動作に依存して親ローダーからPackage
を返す場合、Package
によって公開されるプロパティは残りのプログラムで期待どおりにならない場合があります。 たとえば、Package
は、子ローダーによって定義されたpackage-info.class
ファイルに注釈が存在する場合でも、親ローダーによって定義されたpackage-info.class
ファイルの注釈のみを公開します。 より堅牢なアプローチは、指定されたクラス・ローダーのPackage
を返すgetDefinedPackage(java.lang.String)
メソッドを使用することです。このクラス・ローダーとその祖先のnameによるパッケージを検索します。このクラス・ローダーが指定された名前の
Package
を定義する場合、Package
が返されます。 それ以外の場合、このクラス・ローダーの祖先は、指定された名前のPackage
の(親による親)を再帰的に検索されます。- APIのノート:
platform class loader
はアプリケーション・クラス・ローダーに委譲することができますが、アプリケーション・クラス・ローダーはその祖先ではありません。 プラットフォーム・クラス・ローダーで呼び出された場合、このメソッドはアプリケーション・クラス・ローダーに定義されたパッケージを検出しません。- パラメータ:
name
- 「パッケージ名」- 戻り値:
- このクラス・ローダーまたはその祖先によって定義された指定された名前の
Package
、または見つからない場合はnull
。 - 例外:
NullPointerException
-name
がnull
の場合。- 導入されたバージョン:
- 1.2
- 関連項目:
-
getPackages
protected Package[] getPackages()このクラス・ローダーとその祖先によって定義されたすべてのPackage
を返します。 返される配列には、同じパッケージ名の複数のPackage
オブジェクトが含まれ、それぞれがクラス・ローダー階層の異なるクラス・ローダーによって定義されます。- APIのノート:
platform class loader
は、アプリケーション・クラス・ローダーに委譲することができます。 言い換えれば、アプリケーション・クラス・ローダーに定義されたモジュール内のパッケージは、プラットフォーム・クラス・ローダーに表示されることがあります。 一方、アプリケーション・クラス・ローダーはその祖先ではないため、プラットフォーム・クラス・ローダーで呼び出されると、このメソッドはアプリケーション・クラス・ローダーに定義されたパッケージを返しません。- 戻り値:
- このクラス・ローダーとその祖先によって定義された
Package
オブジェクトの配列 - 導入されたバージョン:
- 1.2
- 関連項目:
-
findLibrary
ネイティブ・ライブラリの絶対パス名を返します。 VMは、このメソッドを呼び出して、このクラス・ローダーによってロードされたクラスのネイティブ・ライブラリを検索します。 このメソッドがnull
を返す場合、VMは「java.library.path
」プロパティで指定されたパスに従ってライブラリを検索します。- パラメータ:
libname
- ライブラリ名- 戻り値:
- ネイティブ・ライブラリの絶対パス
- 導入されたバージョン:
- 1.2
- 関連項目:
-
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
-
defineClass(String, byte[], int, int)
に置き換えられました