- java.lang.Object
-
- java.lang.ClassLoader
-
- 直系の既知のサブクラス:
SecureClassLoader
public abstract class ClassLoader extends Object
クラス・ローダーは、クラスのロードを担当するオブジェクトです。ClassLoaderクラスは抽象クラスです。 クラスのバイナリ名を指定すると、クラス・ローダーはクラスの定義を構成するデータを見つけるか生成します。 一般的な方法としては、名前をファイル名に変換して、ファイル・システムからその名前の「クラス・ファイル」を読み込みます。すべての
Classオブジェクトには、そのオブジェクトを定義したClassLoaderに対するreferenceが含まれます。配列クラスの
Classオブジェクトは、クラス・ローダーによっては作成されず、Java Runtimeの要求に応じて自動的に作成されます。 配列クラスのクラス・ローダー(Class.getClassLoader()から返される)は、その要素の型のクラス・ローダーと同じになります。要素の型がプリミティブ型の場合、配列クラスはクラス・ローダーを持ちません。アプリケーションは、Java仮想マシンが動的にクラスをロードするように拡張するために、
ClassLoaderのサブクラスを実装します。クラス・ローダーは一般的に、セキュリティ・マネージャがセキュリティ・ドメインを示すために使われます。
クラス・ローダーは、クラスのロードに加えて、リソースの検索も行います。 リソースは、抽象パス名(/)で区切られたパス名で識別されるデータ(
.classファイル、構成データ、イメージなど)です。 リソースは、通常、アプリケーションまたはライブラリ内のコードによって配置できるように、アプリケーションまたはライブラリとともにパッケージ化されます。 場合によっては、リソースがほかのライブラリによって配置されるように含まれています。ClassLoaderクラスは、委譲モデルを使ってクラスとリソースを探します。ClassLoaderの各インスタンスは、関連する親クラス・ローダーを持ちます。 クラスまたはリソースを検索するようにリクエストされた場合、ClassLoaderインスタンスは、通常、クラスまたはリソース自体を検索する前に、そのクラスまたはリソースの検索を親クラス・ローダーに委任します。クラスの同時ロードをサポートするクラス・ローダーは、パラレル対応クラス・ローダーと呼ばれ、
ClassLoader.registerAsParallelCapableメソッドを起動してクラスの初期化時に自身を登録する必要があります。ClassLoaderクラスはデフォルトで並行可能として登録されます。 ただしそのサブクラスについては、並行可能な場合には自身を登録する必要があります。 委任モデルが厳密に階層化されていない環境では、クラス・ローダーをパラレル化できる必要があります。そうしないと、クラス・ロードがデッドロックにつながる可能性があります。これは、ローダー・ロックがクラス・ロード・プロセスの間保持されるためです(loadClassメソッドを参照)。ランタイム組込みクラス・ローダー
Javaランタイムには、次の組込みクラス・ローダーがあります。ブートストラップ・クラス・ローダー。 これは、仮想マシンの組込みクラス・ローダーで、通常は
nullとして表され、親を持ちません。プラットフォーム・クラス・ローダー。 すべてのプラットフォーム・クラスは、
ClassLoaderインスタンスの親として使用できるプラットフォーム・クラス・ローダーから参照できます。 プラットフォーム・クラスには、Java SEプラットフォームAPI、その実装クラス、およびプラットフォーム・クラス・ローダーまたはその祖先によって定義されるJDK固有のランタイム・クラスが含まれます。プラットフォーム・クラス・ローダーに定義されたモジュールのアップグレード/オーバーライド、およびアップグレードされたモジュールが、プラットフォーム・クラス・ローダーとその祖先以外のクラス・ローダーに定義されたモジュールを読み取ることを許可するには、プラットフォーム・クラス・ローダーが他のクラス・ローダー、たとえばアプリケーション・クラス・ローダーに委任する必要がある場合があります。 つまり、プラットフォーム・クラス・ローダーとその祖先以外のクラス・ローダーに定義された名前付きモジュール内のクラスは、プラットフォーム・クラス・ローダーから参照できます。
システム・クラス・ローダー。 これはアプリケーション・クラス・ローダーとも呼ばれ、プラットフォーム・クラス・ローダーとは異なります。 通常、システム・クラス・ローダーは、アプリケーション・クラス・パス、モジュール・パスおよびJDK固有のツールでクラスを定義するために使用されます。 プラットフォーム・クラス・ローダーは、すべてのプラットフォーム・クラスが参照できるシステム・クラス・ローダーの親または祖先です。
通常、Java仮想マシンは、プラットフォームに依存しない方法でローカル・ファイル・システムからクラスをロードします。 ただし、ファイルから作成できないクラスもあります。このようなクラスは、ネットワークなどのほかのソースから作成したり、アプリケーションが構築したりします。 メソッド
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"
ClassLoaderのメソッドにStringパラメータとして指定するパッケージ名は、空の文字列(名前のないパッケージを示す)またはJava™言語仕様で定義されている完全修飾名である必要があります。- 導入されたバージョン:
- 1.0
- 関連項目:
resolveClass(Class)- The Java™Language Specificationを参照してください。
- 6.7 完全修飾名、 13.1バイナリの形式
-
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protectedClassLoader()getSystemClassLoader()メソッドによって戻されたClassLoaderを親クラス・ローダーとして使用して、新しいクラス・ローダーを作成します。protectedClassLoader(ClassLoader parent)指定された親クラス・ローダーを使って、委譲のために新しいクラス・ローダーを作成します。protectedClassLoader(String name, ClassLoader parent)指定された名前の新しいクラス・ローダーを作成し、指定された親クラス・ローダーを委任に使用します。
-
メソッドのサマリー
すべてのメソッド staticメソッド インスタンス・メソッド 具象メソッド 非推奨のメソッド 修飾子と型 メソッド 説明 voidclearAssertionStatus()このクラス・ローダーのデフォルトのアサーション・ステータスをfalseに設定し、クラス・ローダーに関連付けられたパッケージ・デフォルトまたはクラスのアサーション・ステータス設定をすべて破棄します。protected Class<?>defineClass(byte[] b, int off, int len)非推奨。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)ByteBufferを、指定されたProtectionDomainを持つクラスClassのインスタンスに変換します。protected PackagedefinePackage(String name, String specTitle, String specVersion, String specVendor, String implTitle, String implVersion, String implVendor, URL sealBase)このClassLoaderのnameでパッケージを定義します。protected Class<?>findClass(String name)指定されたバイナリ名を持つクラスを探します。protected Class<?>findClass(String moduleName, String name)このクラス・ローダーに定義されたモジュール内の指定されたバイナリ名を持つクラスを検索します。protected StringfindLibrary(String libname)ネイティブ・ライブラリの絶対パス名を返します。protected Class<?>findLoadedClass(String name)protected URLfindResource(String name)指定された名前を持つリソースを検索します。protected URLfindResource(String moduleName, String name)このクラス・ローダーに定義されたモジュール内のリソースへのURLを返します。protected Enumeration<URL>findResources(String name)指定された名前のすべてのリソースを表すURLオブジェクトの列挙を戻します。protected Class<?>findSystemClass(String name)指定されたバイナリ名を持つクラスを探して、必要に応じてロードします。protected ObjectgetClassLoadingLock(String className)クラス・ロード操作用のロック・オブジェクトを返します。PackagegetDefinedPackage(String name)このクラス・ローダーによって定義された、指定された名前のPackageを返します。Package[]getDefinedPackages()このクラス・ローダーによって定義されたすべてのPackageを返します。StringgetName()このクラス・ローダーの名前を返すか、このクラス・ローダーに名前が付けられていない場合はnullを返します。protected PackagegetPackage(String name)非推奨。複数のクラス・ローダーが互いに委任し、同じパッケージ名を持つクラスを定義し、そのようなローダーの1つがgetPackageの検索動作に依存して親ローダーからPackageを返す場合、Packageによって公開されるプロパティは、プログラムの休止状態では想定どおりでない可能性があります。protected Package[]getPackages()このクラス・ローダーとその祖先によって定義されたすべてのPackageを返します。ClassLoadergetParent()委譲のための親クラス・ローダーを返します。static ClassLoadergetPlatformClassLoader()プラットフォーム・クラス・ローダーを返します。URLgetResource(String name)指定された名前を持つリソースを検索します。InputStreamgetResourceAsStream(String name)指定されたリソースを読み込む入力ストリームを返します。Enumeration<URL>getResources(String name)指定された名前を持つすべてのリソースを検索します。static ClassLoadergetSystemClassLoader()システム・クラス・ローダーを返します。static URLgetSystemResource(String name)クラスをロードするために使用される検索パスから、指定された名前のリソースを探します。static InputStreamgetSystemResourceAsStream(String name)クラスをロードするのに使用される検索パスから、指定された名前のリソースを、読込み用にオープンします。static Enumeration<URL>getSystemResources(String name)クラスをロードするために使用される検索パスから、指定された名前のすべてのリソースを探します。ModulegetUnnamedModule()このクラス・ローダーの名前のないModuleを返します。booleanisRegisteredAsParallelCapable()このクラス・ローダーがパラレル対応として登録されている場合はtrueを戻し、それ以外の場合はfalseを戻します。Class<?>loadClass(String name)指定されたバイナリ名を持つクラスをロードします。protected Class<?>loadClass(String name, boolean resolve)指定されたバイナリ名を持つクラスをロードします。protected static booleanregisterAsParallelCapable()呼び出し元を並列対応として登録します。protected voidresolveClass(Class<?> c)指定されたクラスをリンクします。Stream<URL>resources(String name)要素が指定された名前を持つすべてのリソースのURLであるストリームを返します。voidsetClassAssertionStatus(String className, boolean enabled)このクラス・ローダーの指定されたトップレベル・クラスおよびそこに含まれるネストされたクラス内に対して、目的のアサーション・ステータスを設定します。voidsetDefaultAssertionStatus(boolean enabled)このクラス・ローダーのデフォルトのアサーション・ステータスを設定します。voidsetPackageAssertionStatus(String packageName, boolean enabled)指定されたパッケージ・デフォルトのアサーション・ステータスを設定します。protected voidsetSigners(Class<?> c, Object[] signers)クラスの署名者を設定します。
-
-
-
コンストラクタの詳細
-
ClassLoader
protected ClassLoader(String name, ClassLoader parent)
指定された名前の新しいクラス・ローダーを作成し、指定された親クラス・ローダーを委任に使用します。- APIのノート:
- 親が
null(ブートストラップ・クラス・ローダー用)として指定されている場合、すべてのプラットフォーム・クラスが表示される保証はありません。 - パラメータ:
name- クラス・ローダー名。名前が付けられていない場合はnullparent- 親クラス・ローダー- 例外:
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
protected Object getClassLoadingLock(String className)
クラス・ロード操作用のロック・オブジェクトを返します。 下位互換性のため、このメソッドのデフォルト実装は次のように動作します。 このClassLoaderオブジェクトが並行可能として登録されている場合、このメソッドは、指定されたクラス名に関連付けられた専用オブジェクトを返します。 それ以外の場合、メソッドはこのClassLoaderオブジェクトを返します。- パラメータ:
className- ロードするクラスの名前- 戻り値:
- クラス・ロード処理用のロック
- 例外:
NullPointerException- 並行可能として登録されていて、classNameがnullの場合- 導入されたバージョン:
- 1.7
- 関連項目:
loadClass(String, boolean)
-
findClass
protected Class<?> findClass(String name) throws ClassNotFoundException
指定されたバイナリ名を持つクラスを探します。 このメソッドは、クラスをロードするための委任モデルに従うクラス・ローダー実装によってオーバーライドされ、リクエストされたクラスの親クラス・ローダーをチェックした後にloadClassメソッドによって呼び出されます。- 実装要件:
- デフォルトの実装では、
ClassNotFoundExceptionがスローされます。 - パラメータ:
name- クラスのバイナリ名- 戻り値:
- 結果として得られる
Classオブジェクト - 例外:
ClassNotFoundException- クラスが見つからなかった場合- 導入されたバージョン:
- 1.2
-
findClass
protected Class<?> findClass(String moduleName, String name)
このクラス・ローダーに定義されたモジュール内の指定されたバイナリ名を持つクラスを検索します。 モジュールからのロードをサポートするクラス・ローダー実装は、このメソッドをオーバーライドする必要があります。- APIのノート:
- このメソッドは、クラスが見つからなかった場合に
ClassNotFoundExceptionをスローするのではなく、nullを返します。 - 実装要件:
- デフォルトの実装では、
moduleNameがnullのときにfindClass(String)を呼び出してクラスの検索を試みます。 それ以外の場合は、nullを返します。 - パラメータ:
moduleName- モジュール名。このクラス・ローダーの名前なしモジュール内のクラスを検索する場合はnullname- クラスのバイナリ名- 戻り値:
- 結果の
Classオブジェクト。クラスが見つからなかった場合はnull。 - 導入されたバージョン:
- 9
-
defineClass
@Deprecated(since="1.1") protected final Class<?> defineClass(byte[] b, int off, int len) throws ClassFormatError
非推奨。バイトの配列をClassクラスのインスタンスに変換します。 最初にClassを解決してからでなければ、それを使用することはできません。 このメソッドは非推奨です。バイナリ名を最初の引数として取るバージョンの方が安全であるため、そのバージョンを使用するようにしてください。- パラメータ:
b- クラス・データを構成するバイト。offからoff+len-1までの位置にあるbyteは、『Java™仮想マシン仕様』で定義される有効なクラス・ファイルの形式を持つ。off- クラス・データのb内での開始オフセットlen- クラス・データの長さ- 戻り値:
- 指定されたクラス・データから作成された
Classオブジェクト - 例外:
ClassFormatError- データが有効なクラスを含まなかった場合IndexOutOfBoundsException-offまたはlenが負の場合、またはoff+lenがb.lengthより大きい場合SecurityException- このクラスとは異なる一連の証明書で署名されたクラスを含むパッケージにこのクラスを追加しようとした場合、または「java.」で始まる完全指定名を持つパッケージ内でクラスを定義しようとした場合。- 関連項目:
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メソッドを使用します。このメソッドは、
Classのパッケージに対応するパッケージをこのクラス・ローダーに定義します(このようなパッケージがこのクラス・ローダーにまだ定義されていない場合)。 定義済パッケージの名前は、バイト配列bで指定されたクラスのバイナリ名から導出されます。 定義済みパッケージのその他のプロパティーは、Packageで指定されています。- パラメータ:
name- クラスの予想されるバイナリ名。不明な場合はnullb- クラス・データを構成するバイト。offからoff+len-1までの位置にあるbyteは、『Java™仮想マシン仕様』で定義される有効なクラス・ファイルの形式を持つ。off- クラス・データのb内での開始オフセットlen- クラス・データの長さ- 戻り値:
- 指定されたクラス・データから作成された
Classオブジェクト。 - 例外:
ClassFormatError- データが有効なクラスを含まなかった場合IndexOutOfBoundsException-offまたはlenが負の場合、またはoff+lenがb.lengthより大きい場合SecurityException- このクラス(未署名)とは異なる証明書セットを使って署名されたクラスを含むパッケージに、このクラスを追加しようとした場合、またはnameが「java.」で始まる場合。- 導入されたバージョン:
- 1.1
- 関連項目:
loadClass(String, boolean),resolveClass(Class),CodeSource,SecureClassLoader
-
defineClass
protected final Class<?> defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain) throws ClassFormatError
バイトの配列を、指定されたProtectionDomainを持つクラスClassのインスタンスに変換します。指定された
ProtectionDomainがnullの場合、defineClass(String, byte[], int, int)のドキュメントで指定されているように、デフォルトの保護ドメインがクラスに割り当てられます。 最初にクラスを解決してからでなければ、クラスを使用することはできません。パッケージで定義される最初のクラスにより、そのパッケージ内で続いて定義されたすべてのクラスに必要な、証明書の正確なセットが決まります。 クラスの証明書のセットは、クラスの
ProtectionDomain内のCodeSourceから取得されます。 そのパッケージに追加されたクラスには同一の証明書のセットが含まれている必要があり、含まれていない場合はSecurityExceptionがスローされます。nameがnullの場合、この判別は実行されません。 必ず、定義するクラスのバイナリ名をバイトとともに渡すようにしてください。 このようにして渡すと、定義するクラスは実際に考えたとおりのクラスになります。指定された
nameが"java."で始まる場合、プラットフォーム・クラス・ローダーまたはその祖先によってのみ定義でき、そうでない場合はSecurityExceptionがスローされます。nameがnullでない場合は、バイト配列bで指定されたクラスのバイナリ名と等しくなる必要があります。そうでない場合は、NoClassDefFoundErrorがスローされます。このメソッドは、
Classのパッケージに対応するパッケージをこのクラス・ローダーに定義します(このようなパッケージがこのクラス・ローダーにまだ定義されていない場合)。 定義済パッケージの名前は、バイト配列bで指定されたクラスのバイナリ名から導出されます。 定義済みパッケージのその他のプロパティーは、Packageで指定されています。- パラメータ:
name- クラスの予想されるバイナリ名。不明な場合はnullb- クラス・データを構成するバイト。offからoff+len-1までの位置にあるbyteは、『Java™仮想マシン仕様』で定義される有効なクラス・ファイルの形式を持つ。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
ByteBufferを、指定されたProtectionDomainを持つクラス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- クラスの予想されるバイナリ名。不明な場合はnullb- クラス・データを構成するバイト。b.position()からb.position()+b.limit() -1までの位置にあるbyteは、『Java™仮想マシン仕様』で定義される有効なクラス・ファイルの形式を持つ。protectionDomain- クラスのProtectionDomain、またはnull。- 戻り値:
- データから作成された
ClassオブジェクトおよびProtectionDomain。 - 例外:
ClassFormatError- データが有効なクラスを含まなかった場合。NoClassDefFoundError-nameがnullではなく、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)
- パラメータ:
name- クラスのバイナリ名- 戻り値:
Classオブジェクト。クラスがロードされていない場合はnull- 導入されたバージョン:
- 1.1
-
setSigners
protected final void setSigners(Class<?> c, Object[] signers)
クラスの署名者を設定します。 このメソッドは、クラスの定義後に呼び出す必要があります。- パラメータ:
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- モジュール名。このクラス・ローダーの名前なしモジュール内のリソースを検索する場合はnullname- リソース名- 戻り値:
- リソースへのURL。リソースが見つからなかった場合、リソースを検索するためのURLを構築できなかった場合、リソースへのアクセスがセキュリティ・マネージャによって拒否された場合、またはクラス・ローダーに定義された指定名のモジュールがありません。
null - 例外:
IOException- 入出力エラーが発生した場合- 導入されたバージョン:
- 9
- 関連項目:
ModuleReader.find(String)
-
getResource
public URL getResource(String name)
指定された名前を持つリソースを検索します。 リソースは、クラス・コードからコード位置に依存しない方法でアクセス可能なデータ(イメージ、オーディオ、テキストなど)です。リソースの名前は、「
/」で区切られたパス名であり、これによってリソースが識別されます。名前付きモジュール内のリソースは、
Module.getResourceAsStreamで指定されたカプセル化ルールに従います。 また、リソースの名前が".class"で終わる特殊な場合を除き、このメソッドは、パッケージが無条件にopenedである場合(このメソッドのコール元がリソースと同じモジュール内にある場合でも)、名前付きモジュールのパッケージ内のリソースのみを検索します。- APIのノート:
- 複数のモジュールが同じクラス・ローダーに定義され、複数のモジュールに指定された名前のリソースが含まれている場合、モジュールが検索される順序は指定されず、予測できない可能性があります。 このメソッドをオーバーライドするときは、実装によっていずれかの委譲が
getResources(String)メソッドと確実に一致するようになることをお薦めします。 - 実装要件:
- デフォルト実装では、最初に親クラス・ローダーでリソースを検索します。親が
nullの場合は、仮想マシンに組み込まれたクラス・ローダーのパスが検索されます。 見つからない場合、このメソッドはfindResource(String)を呼び出してリソースを検索します。 - パラメータ:
name- リソース名- 戻り値:
- リソースを読み取るための
URLオブジェクト。リソースが見つからなかった場合、リソースを見つけるためにURLを構築できなかった場合、リソースが無条件に開かれていないパッケージ内にある場合、またはリソースへのアクセスがセキュリティ・マネージャによって拒否された場合、null。 - 例外:
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
public Stream<URL> resources(String name)
要素が指定された名前を持つすべてのリソースのURLであるストリームを返します。 リソースは、クラス・コードからコード位置に依存しない方法でアクセス可能なデータ(イメージ、オーディオ、テキストなど)です。リソースの名前は、
/で区切られたパス名であり、これによってリソースが識別されます。リソースは、返されたストリームが評価されるときに検出されます。 評価の結果が
IOExceptionの場合、I/O例外はUncheckedIOExceptionにラップされ、その後スローされます。名前付きモジュール内のリソースは、
Module.getResourceAsStreamで指定されたカプセル化ルールに従います。 また、リソースの名前が".class"で終わる特殊な場合を除き、このメソッドは、パッケージが無条件にopenedである場合(このメソッドのコール元がリソースと同じモジュール内にある場合でも)、名前付きモジュールのパッケージ内のリソースのみを検索します。- APIのノート:
- このメソッドをオーバーライドするときは、実装によっていずれかの委譲が
getResource(String)メソッドと確実に一致するようになることをお薦めします。 これにより、ストリームによって返される最初の要素が、getResource(String)メソッドが返すリソースと同じになるようになります。 - 実装要件:
- デフォルトの実装では、
getResourcesを呼び出して、指定された名前のすべてのリソースを検索し、列挙内の要素をソースとするストリームを返します。 - パラメータ:
name- リソース名- 戻り値:
- リソース
URLオブジェクトのストリーム。 リソースが見つからなかった場合、ストリームは空になります。URLを構築できないリソース、無条件にオープンされていないパッケージ内にあるリソース、またはセキュリティ・マネージャによってリソースへのアクセスが拒否されたリソースは、ストリームに含まれません。 - 例外:
NullPointerException-nameがnullである場合- 導入されたバージョン:
- 9
-
findResource
protected URL findResource(String name)
指定された名前を持つリソースを検索します。 クラス・ローダー実装は、このメソッドをオーバーライドする必要があります。名前付きモジュール内のリソースの場合、メソッドは
ModulegetResourceAsStreamメソッドで指定されたカプセル化のルールを実装する必要があります。 また、パッケージが無条件にopenedでないかぎり、名前付きモジュールのパッケージに.class以外のリソースを見つけることはできません。- 実装要件:
- デフォルトの実装では
nullを返します。 - パラメータ:
name- リソース名- 戻り値:
- リソースを読み取るための
URLオブジェクト。リソースが見つからなかった場合、リソースを見つけるためにURLを構築できなかった場合、リソースが無条件に開かれていないパッケージ内にある場合、またはリソースへのアクセスがセキュリティ・マネージャによって拒否された場合、null。 - 導入されたバージョン:
- 1.2
-
findResources
protected Enumeration<URL> findResources(String name) throws IOException
指定された名前のすべてのリソースを表すURLオブジェクトの列挙を戻します。 クラス・ローダー実装は、このメソッドをオーバーライドする必要があります。名前付きモジュール内のリソースの場合、メソッドは
ModulegetResourceAsStreamメソッドで指定されたカプセル化のルールを実装する必要があります。 また、パッケージが無条件にopenedでないかぎり、名前付きモジュールのパッケージに.class以外のリソースを見つけることはできません。- 実装要件:
- デフォルトの実装は、要素を含まない列挙を返します。
- パラメータ:
name- リソース名- 戻り値:
- リソースの
URLオブジェクトの列挙。 リソースが見つからなかった場合、列挙は空になる。URLを構築できないリソース、無条件に開かれていないパッケージ内にあるリソース、またはセキュリティ・マネージャによってリソースへのアクセスが拒否されたリソースは、列挙に戻されません。 - 例外:
IOException- 入出力エラーが発生した場合- 導入されたバージョン:
- 1.2
-
registerAsParallelCapable
protected static boolean registerAsParallelCapable()
呼び出し元を並列対応として登録します。 登録が成功するのは、次の条件をすべて満たす場合だけです。- 呼出し元のインスタンスが1つも作成されていない
- 呼出し元のすべてのスーパー・クラス(Objectクラスは除く)が並行可能として登録されている
いったんクラス・ローダーを並行可能として登録すると、それを元に戻す方法はありません。
- 戻り値:
- 呼出し側が正常にパラレル対応として登録された場合は
true、それ以外の場合はfalse。 - 導入されたバージョン:
- 1.7
- 関連項目:
isRegisteredAsParallelCapable()
-
isRegisteredAsParallelCapable
public final boolean isRegisteredAsParallelCapable()
このクラス・ローダーがパラレル対応として登録されている場合はtrueを戻し、それ以外の場合はfalseを戻します。- 戻り値:
- このクラス・ローダーがパラレル対応の場合は
true、それ以外の場合はfalse。 - 導入されたバージョン:
- 9
- 関連項目:
registerAsParallelCapable()
-
getSystemResource
public static URL getSystemResource(String name)
クラスをロードするために使用される検索パスから、指定された名前のリソースを探します。 このメソッドはシステム・クラス・ローダー(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を返します。- 戻り値:
- このクラス・ローダーの名前なしモジュール
- 導入されたバージョン:
- 9
- 関連項目:
Module.isNamed()
-
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"プロパティの空の値は、初期モジュール(メイン・クラスを含むモジュール)の名前が付いているか、名前がないかによって、異なる方法で解釈されます: 名前付きの場合、組込みシステム・クラス・ローダーにはクラス・パスがなく、アプリケーション・モジュール・パスを使用してクラスおよびリソースを検索します。そうでない場合、名前がない場合は現在の作業ディレクトリへのクラス・パスが設定されます。 - 戻り値:
- システム
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のマニフェストでシール済として指定されている場合、通常、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のパッケージがこのクラス・ローダーによってすでに定義されている場合- 導入されたバージョン:
- 1.2
- 関連項目:
- JARファイルの仕様: パッケージ・シール
- The Java™Virtual Machine Specificationを参照してください。
- 5.3 ランタイム・パッケージ
-
getDefinedPackage
public final Package getDefinedPackage(String name)
このクラス・ローダーによって定義された、指定された名前のPackageを返します。- パラメータ:
name- パッケージ名- 戻り値:
- このクラス・ローダーによって定義された指定された名前の
Package、または見つからない場合はnull - 例外:
NullPointerException-nameがnullの場合。- 導入されたバージョン:
- 9
- The Java™Virtual Machine Specificationを参照してください。
- 5.3 ランタイム・パッケージ
-
getDefinedPackages
public final Package[] getDefinedPackages()
このクラス・ローダーによって定義されたすべてのPackageを返します。 戻された配列には、同じ名前の重複したPackageはありません。- APIのノート:
- このメソッドは、既存の
getPackages()メソッドとの一貫性を保つために、SetまたはStreamではなく配列を返します。 - 戻り値:
- このクラス・ローダーによって定義された
Packageオブジェクトの配列。このクラス・ローダーによってパッケージが定義されていない場合は長さ0の配列。 - 導入されたバージョン:
- 9
- The Java™Virtual Machine Specificationを参照してください。
- 5.3 ランタイム・パッケージ
-
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
- 関連項目:
getDefinedPackage(String)
-
getPackages
protected Package[] getPackages()
このクラス・ローダーとその祖先によって定義されたすべてのPackageを返します。 返される配列には、同じパッケージ名のPackageオブジェクトを複数含めることができ、それぞれがクラス・ローダー階層内の異なるクラス・ローダーによって定義されます。- APIのノート:
platform class loaderは、アプリケーション・クラス・ローダーに委任できます。 つまり、アプリケーション クラス ローダーに定義されたモジュール内のパッケージは、プラットフォーム クラス ローダーに表示できます。 一方、アプリケーション・クラス・ローダーはその祖先ではないため、プラットフォーム・クラス・ローダーで呼び出された場合、このメソッドはアプリケーション・クラス・ローダーに定義されたパッケージを返しません。- 戻り値:
- このクラス・ローダーとその祖先によって定義された
Packageオブジェクトの配列 - 導入されたバージョン:
- 1.2
- 関連項目:
getDefinedPackages()
-
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値は「カレント」である無名パッケージを示す(『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
-
-