モジュール java.base
パッケージ 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バイナリの形式
    • コンストラクタの詳細

      • 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

        protected Class<?> loadClass​(String name,
                                     boolean resolve)
                              throws ClassNotFoundException
        指定されたバイナリ名を持つクラスをロードします。 このメソッドのデフォルト実装では、次の順序でクラスを検索します。
        1. クラスがすでにロードされていないかチェックするためにfindLoadedClass(String)を呼び出す。

        2. 親クラス・ローダーでloadClassメソッドを呼び出します。 親がnullの場合は、仮想マシンに組み込まれたクラス・ローダーがかわりに使用されます。

        3. findClass(String)メソッドを呼び出してクラスを探す。

        上記のステップでクラスが見つかった場合、resolveフラグがtrueのときには、このメソッドは見つかったClassオブジェクトに対してresolveClass(Class)メソッドを呼び出します。

        ClassLoaderのサブクラスでは、このメソッドではなくfindClass(String)をオーバーライドすることをお薦めします。

        このメソッドは、オーバーライドされないかぎり、クラス・ロード・プロセス全体で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を返します。
        実装要件:
        デフォルトの実装では、moduleNamenullのときに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からoff+len-1までの位置にあるbyteは、『Java™仮想マシン仕様』で定義される有効なクラス・ファイルの形式を持つ。
        off - クラス・データのb内での開始オフセット
        len - クラス・データの長さ
        戻り値:
        指定されたクラス・データから作成されたClassオブジェクト
        例外:
        ClassFormatError - データが有効なクラスを含まなかった場合
        IndexOutOfBoundsException - offまたはlenが負の場合、またはoff+lenb.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 - クラスの予想されるバイナリ名。不明な場合はnull
        b - クラス・データを構成するバイト。 offからoff+len-1までの位置にあるbyteは、『Java™仮想マシン仕様』で定義される有効なクラス・ファイルの形式を持つ。
        off - クラス・データのb内での開始オフセット
        len - クラス・データの長さ
        戻り値:
        指定されたクラス・データから作成されたClassオブジェクト。
        例外:
        ClassFormatError - データが有効なクラスを含まなかった場合
        IndexOutOfBoundsException - offまたはlenが負の場合、またはoff+lenb.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のインスタンスに変換します。

        指定されたProtectionDomainnullの場合、defineClass(String, byte[], int, int)のドキュメントで指定されているように、デフォルトの保護ドメインがクラスに割り当てられます。 最初にクラスを解決してからでなければ、クラスを使用することはできません。

        パッケージで定義される最初のクラスにより、そのパッケージ内で続いて定義されたすべてのクラスに必要な、証明書の正確なセットが決まります。 クラスの証明書のセットは、クラスのProtectionDomain内のCodeSourceから取得されます。 そのパッケージに追加されたクラスには同一の証明書のセットが含まれている必要があり、含まれていない場合はSecurityExceptionがスローされます。 namenullの場合、この判別は実行されません。 必ず、定義するクラスのバイナリ名をバイトとともに渡すようにしてください。 このようにして渡すと、定義するクラスは実際に考えたとおりのクラスになります。

        指定されたnameが"java."で始まる場合、プラットフォーム・クラス・ローダーまたはその祖先によってのみ定義でき、そうでない場合はSecurityExceptionがスローされます。 namenullでない場合は、バイト配列bで指定されたクラスのバイナリ名と等しくなる必要があります。そうでない場合は、NoClassDefFoundErrorがスローされます。

        このメソッドは、Classのパッケージに対応するパッケージをこのクラス・ローダーに定義します(このようなパッケージがこのクラス・ローダーにまだ定義されていない場合)。 定義済パッケージの名前は、バイト配列bで指定されたクラスのバイナリ名から導出されます。 定義済みパッケージのその他のプロパティーは、Packageで指定されています。

        パラメータ:
        name - クラスの予想されるバイナリ名。不明な場合はnull
        b - クラス・データを構成するバイト。 offからoff+len-1までの位置にあるbyteは、『Java™仮想マシン仕様』で定義される有効なクラス・ファイルの形式を持つ。
        off - クラス・データのb内での開始オフセット
        len - クラス・データの長さ
        protectionDomain - クラスのProtectionDomain
        戻り値:
        データから作成されたClassオブジェクトおよびProtectionDomain
        例外:
        ClassFormatError - データが有効なクラスを含まなかった場合
        NoClassDefFoundError - namenullではなく、bで指定されたクラスのバイナリ名と等しくない場合
        IndexOutOfBoundsException - offまたはlenが負の場合、またはoff+lenb.lengthより大きい場合
        SecurityException - このクラスとは異なる証明書セットによって署名されたクラスを含むパッケージにこのクラスを追加しようとした場合、またはnamejava.で始まり、このクラス・ローダーがプラットフォーム・クラス・ローダーまたはその祖先ではない場合。
      • defineClass

        protected final Class<?> defineClass​(String name,
                                             ByteBuffer b,
                                             ProtectionDomain protectionDomain)
                                      throws ClassFormatError
        ByteBufferを、指定されたProtectionDomainを持つクラスClassのインスタンスに変換します。 指定されたProtectionDomainnullの場合、defineClass(String, byte[], int, int)のドキュメントで指定されているように、デフォルトの保護ドメインがクラスに割り当てられます。 最初にクラスを解決してからでなければ、クラスを使用することはできません。

        パッケージの証明書セットを決定するパッケージで定義されている最初のクラスに関する規則、クラス名に関する制限、およびクラスの定義済みパッケージは、defineClass(String, byte[], int, int, ProtectionDomain)のドキュメントで指定されている規則と同じです。

        このメソッドをcl.defineClass(name, bBuffer, pd)の形式で呼び出すと、次の文とまったく同じ結果が得られます

        ...
        byte[] temp = new byte[bBuffer.remaining()];
        bBuffer.get(temp);
        return cl.defineClass(name, temp, 0, temp.length, pd);

        パラメータ:
        name - クラスの予想されるバイナリ名。不明な場合はnull
        b - クラス・データを構成するバイト。 b.position()からb.position()+b.limit() -1 までの位置にあるbyteは、『Java™仮想マシン仕様』で定義される有効なクラス・ファイルの形式を持つ。
        protectionDomain - クラスのProtectionDomain、またはnull
        戻り値:
        データから作成されたClassオブジェクトおよびProtectionDomain
        例外:
        ClassFormatError - データが有効なクラスを含まなかった場合。
        NoClassDefFoundError - namenullではなく、bで指定されたクラスのバイナリ名と等しくない場合
        SecurityException - このクラスとは異なる証明書セットを使って署名されたクラスを含むパッケージに、このクラスを追加しようとする場合、またはnameが「java.」で始まる場合。
        導入されたバージョン:
        1.5
        関連項目:
        defineClass(String, byte[], int, int, ProtectionDomain)
      • resolveClass

        protected final void resolveClass​(Class<?> c)
        指定されたクラスをリンクします。 クラス・ローダーはこのメソッドを使って、クラスをリンクします。 cクラスがすでにリンクされている場合、このメソッドは単に復帰します。 そうでない場合、『Java™言語仕様』の「Execution」の章で説明しているように、クラスはリンクされます。
        パラメータ:
        c - リンクするクラス
        例外:
        NullPointerException - cnullの場合。
        関連項目:
        defineClass(String, byte[], int, int)
      • findSystemClass

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

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

        パラメータ:
        name - クラスのバイナリ名
        戻り値:
        指定されたnameClassオブジェクト
        例外:
        ClassNotFoundException - クラスが見つからなかった場合
        関連項目:
        ClassLoader(ClassLoader), getParent()
      • findLoadedClass

        protected final Class<?> findLoadedClass​(String name)
        このローダーがこのバイナリ名を持つクラスの起動ローダーとしてJava仮想マシンにより記録されていた場合は、指定されたバイナリ名を持つクラスを返します。 それ以外の場合はnullを返します。
        パラメータ:
        name - クラスのバイナリ名
        戻り値:
        Classオブジェクト。クラスがロードされていない場合はnull
        導入されたバージョン:
        1.1
      • setSigners

        protected final void setSigners​(Class<?> c,
                                        Object[] signers)
        クラスの署名者を設定します。 このメソッドは、クラスの定義後に呼び出す必要があります。
        パラメータ:
        c - Classオブジェクト
        signers - クラスの署名者
        導入されたバージョン:
        1.1
      • findResource

        protected URL findResource​(String moduleName,
                                   String name)
                            throws IOException
        このクラス・ローダーに定義されたモジュール内のリソースへのURLを返します。 モジュールからのロードをサポートするクラス・ローダー実装は、このメソッドをオーバーライドする必要があります。
        APIのノート:
        このメソッドは、Class.getResourceClass.getResourceAsStreamおよびModule.getResourceAsStreamメソッドの基礎です。 これは、Module.getResourceAsStreamで指定されたカプセル化のルールには適用されません。
        実装要件:
        デフォルトの実装では、moduleNamenullの場合にfindResource(String)を呼び出してリソースの検索が試行されます。 それ以外の場合は、nullを返します。
        パラメータ:
        moduleName - モジュール名。このクラス・ローダーの名前なしモジュール内のリソースを検索する場合はnull
        name - リソース名
        戻り値:
        リソースへの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 - namenullである場合
        導入されたバージョン:
        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 - namenullである場合
        導入されたバージョン:
        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 - namenullである場合
        導入されたバージョン:
        9
      • findResource

        protected URL findResource​(String name)
        指定された名前を持つリソースを検索します。 クラス・ローダー実装は、このメソッドをオーバーライドする必要があります。

        名前付きモジュール内のリソースの場合、メソッドはModule getResourceAsStreamメソッドで指定されたカプセル化のルールを実装する必要があります。 また、パッケージが無条件にopenedでないかぎり、名前付きモジュールのパッケージに.class以外のリソースを見つけることはできません。

        実装要件:
        デフォルトの実装ではnullを返します。
        パラメータ:
        name - リソース名
        戻り値:
        リソースを読み取るためのURLオブジェクト。リソースが見つからなかった場合、リソースを見つけるためにURLを構築できなかった場合、リソースが無条件に開かれていないパッケージ内にある場合、またはリソースへのアクセスがセキュリティ・マネージャによって拒否された場合、null
        導入されたバージョン:
        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. 呼出し元のインスタンスが1つも作成されていない
        2. 呼出し元のすべてのスーパー・クラス(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 - namenullである場合
        導入されたバージョン:
        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)
        このClassLoadernameでパッケージを定義します。

        パッケージ名は、クラス・ローダー内で一意である必要があり、一度作成すると再定義または変更できません。

        クラス・ローダーがバージョン情報などの特定のプロパティでパッケージを定義する場合、クラス・ローダーはdefineClassをコールする前に、このdefinePackageメソッドをコールする必要があります。 それ以外の場合、defineClassメソッドは、新しく定義されたクラスのパッケージに対応するパッケージをこのクラス・ローダーに定義します。この定義済パッケージのプロパティは、Packageによって指定されます。

        APIのノート:
        JAR内のクラスのパッケージを定義したいクラス・ローダーは、通常、JARのマニフェストからの仕様および実装のタイトル、バージョンおよびベンダーを使用します。 パッケージがJARのマニフェストでシール済として指定されている場合、通常、JARファイルのURLsealBaseとして使用されます。 このクラス・ローダーによって定義されたパッケージ'p'のクラスが複数のJARからロードされる場合、Packageオブジェクトには、定義されたパッケージ'p'の最初のクラスと、パッケージ'p'を明示的に定義するために最初に読み取られるJARのマニフェストに応じて、異なる情報が含まれることがあります。

        クラス・ローダーは、名前付きモジュールでパッケージを明示的に定義するためにこのメソッドをコールしないことを強くお薦めします。かわりに、クラスが定義中の場合、パッケージは自動的に定義されます。 Packageを明示的に定義することが望ましい場合は、指定したモジュール内のすべてのパッケージが、Packageで指定されたプロパティで定義されるようにする必要があります。 それ以外の場合、名前付きモジュールの一部のPackageオブジェクトは、たとえば別のシール・ベースでシールされる場合があります。

        パラメータ:
        name - パッケージ名
        specTitle - 仕様のタイトル
        specVersion - 仕様のバージョン
        specVendor - 仕様のベンダー
        implTitle - 実装のタイトル
        implVersion - 実装のバージョン
        implVendor - 実装のベンダー
        sealBase - nullでない場合、このパッケージは指定されたコード・ソースURLオブジェクトに関してシールされます。 そうでない場合、パッケージはシールされない
        戻り値:
        新しく定義されたPackageオブジェクト
        例外:
        NullPointerException - namenullの場合。
        IllegalArgumentException - 指定されたnameのパッケージがこのクラス・ローダーによってすでに定義されている場合
        導入されたバージョン:
        1.2
        関連項目:
        JARファイルの仕様: パッケージ・シール
        The Java™Virtual Machine Specificationを参照してください。
        5.3 ランタイム・パッケージ
      • getDefinedPackage

        public final Package getDefinedPackage​(String name)
        このクラス・ローダーによって定義された、指定された名前Packageを返します。
        パラメータ:
        name - パッケージ名
        戻り値:
        このクラス・ローダーによって定義された指定された名前のPackage、または見つからない場合はnull
        例外:
        NullPointerException - namenullの場合。
        導入されたバージョン:
        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 - namenullの場合。
        導入されたバージョン:
        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.textjavax.swingのサブパッケージであり、java.utiljava.lang.reflectはどちらもjavaのサブパッケージです。

        1つのクラスに複数のパッケージ・デフォルトが適用される場合は、そのクラスにもっとも関連性の高いパッケージ・デフォルトが、ほかのパッケージ・デフォルトに優先して使用されます。 たとえば、javax.langjavax.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