- 直系の既知のサブクラス:
SecureClassLoader
ClassLoader
は抽象クラスです。 クラスのバイナリ名を指定すると、クラス・ローダーはクラスの定義を構成するデータを見つけるか生成します。 一般的な方法としては、名前をファイル名に変換して、ファイル・システムからその名前の「クラス・ファイル」を読み込みます。
すべてのClass
オブジェクトには、そのオブジェクトを定義したClassLoader
へのreference
が含まれます。
配列クラスのClass
オブジェクトは、クラス・ローダーでは作成されませんが、Javaランタイムで必要とされるとおりに自動的に作成されます。 配列クラスのクラス・ローダー(Class.getClassLoader()
から返される)は、その要素の型のクラス・ローダーと同じになります。要素の型がプリミティブ型の場合、配列クラスはクラス・ローダーを持ちません。
アプリケーションは、Java仮想マシンがクラスを動的にロードする方法を拡張するために、ClassLoader
のサブクラスを実装します。
クラス・ローダーは一般的に、セキュリティ・マネージャがセキュリティ・ドメインを示すために使われます。
クラスをロードすることに加えて、クラス・ローダーはリソースの特定も担当します。 リソースは、抽象的な'/'-separatedパス名で識別されるデータ(".class
"ファイル、構成データ、またはイメージなど)です。 リソースは通常、アプリケーションまたはライブラリにパッケージ化されているため、アプリケーションまたはライブラリ内のコードでリソースを見つけることができます。 場合によっては、リソースが他のライブラリに配置されるように含まれています。
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
クラス・ロード操作用のロック・オブジェクトを返します。- APIのノート:
- このメソッドにより、パラレル対応クラス・ローダーは、複数のスレッドがデッドロックなしでクラスを同時にロードできるように、よりきめ細かいロック・スキームを実装できます。 非パラレル対応のクラス・ローダーの場合、
ClassLoader
オブジェクトは、クラスのロード操作中に同期されます。 非階層委任を持つクラス・ローダーは、デッドロックを防ぐために「パラレル対応として登録」である必要があります。 - 実装要件:
- この
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);cl.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
が関連付けられている場合があります。 ほとんどのクラス・ローダーはfindClass(String)
のみをオーバーライドする必要があるため、通常、ClassLoader
のサブクラスはこのメソッドを呼び出す必要はありません。- パラメータ:
name
- クラスのバイナリ名- 戻り値:
- 指定した
name
のClass
オブジェクト - 例外:
ClassNotFoundException
- クラスが見つからなかった場合- 関連項目:
-
findLoadedClass
-
setSigners
-
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。リソースが見つからなかった場合は
null
、リソースを特定するためのURLを構築できなかった、リソースへのアクセスがセキュリティ・マネージャによって拒否された、またはクラス・ローダーに定義された指定された名前のモジュールがない。 - 例外:
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クラスは除く)が並行可能として登録されている
いったんクラス・ローダーを並行可能として登録すると、それを元に戻す方法はありません。
このメソッドが、コール元が
ClassLoader
のサブクラスでないコンテキストからコールされる場合、またはスタック(例、JNIアタッチ・スレッドから直接コールされる場合)にコール元フレームがない場合、IllegalCallerException
がスローされます。- 戻り値:
- 呼出し側がパラレル対応として正常に登録された場合は
true
、それ以外の場合はfalse
。 - 例外:
IllegalCallerException
- コール元がClassLoader
のサブクラスでない場合- 導入されたバージョン:
- 1.7
- 関連項目:
-
isRegisteredAsParallelCapable
public final boolean isRegisteredAsParallelCapable()このクラス・ローダーが「並列対応」、それ以外の場合はfalse
として登録されている場合はtrue
を返します。- 戻り値:
- このクラス・ローダーがパラレル対応の場合は
true
、それ以外の場合はfalse
。 - 導入されたバージョン:
- 9
- 関連項目:
-
getSystemResource
クラスをロードするために使用される検索パスから、指定された名前のリソースを探します。 このメソッドはシステム・クラス・ローダー(getSystemClassLoader()
を参照)を使ってリソースを見つけます。名前付きモジュールのリソースは、
Module.getResourceAsStream
で指定されたカプセル化ルールの影響を受けます。 また、リソースの名前が".class
"で終わる特殊なケースを除き、このメソッドは、パッケージが無条件にopened
の場合にのみ、指定されたモジュールのパッケージ内のリソースを検索します。- パラメータ:
name
- リソース名- 戻り値:
- リソースに対する
URL
。リソースが見つからなかった場合、リソースを特定するためのURLを構築できなかった場合、リソースが無条件にオープンされていないパッケージ内にある場合、またはリソースへのアクセスがセキュリティ・マネージャによって拒否された場合、null
。 - 導入されたバージョン:
- 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
-
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
- (およびif)の初期化時に指定されたクラスでアサーションを有効にする場合はtrue
、クラスでアサーションを無効にする場合はfalse
。- 導入されたバージョン:
- 1.4
-
clearAssertionStatus
public void clearAssertionStatus()このクラス・ローダーのデフォルトのアサーション・ステータスをfalse
に設定し、クラス・ローダーに関連付けられたパッケージ・デフォルトまたはクラス・アサーション・ステータス設定を破棄します。 このメソッドを利用すると、クラス・ローダーがコマンド行または永続的なアサーション・ステータス設定をすべて無視するため、「クリーンな状態で」起動できます。- 導入されたバージョン:
- 1.4
-
defineClass(String, byte[], int, int)
に置き換えられました