言語

ClassLoader クラス

定義

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

[Android.Runtime.Register("java/lang/ClassLoader", DoNotGenerateAcw=true)]
public abstract class ClassLoader : Java.Lang.Object
[<Android.Runtime.Register("java/lang/ClassLoader", DoNotGenerateAcw=true)>]
type ClassLoader = class
    inherit Object
継承
ClassLoader
派生
属性

注釈

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。 ClassLoaderクラスは抽象クラスです。 クラスのバイナリ名を指定すると、クラス ローダーは、クラスの定義を構成するデータの検索または生成を試みる必要があります。 一般的な方法は、名前をファイル名に変換し、その名前の "クラス ファイル" をファイル システムから読み取る方法です。

すべてのjava.lang.Class Class オブジェクトには、それを定義したClass#getClassLoader() referenceへのClassLoaderが含まれています。

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

アプリケーションは、Java仮想マシンがクラスを動的に読み込む方法を拡張するために、ClassLoaderのサブクラスを実装します。

クラス ローダーは、通常、セキュリティ マネージャーがセキュリティ ドメインを示すために使用できます。

クラスの読み込みに加えて、クラス ローダーもリソースの検索を担当します。 リソースとは、抽象 "/" で区切られたパス名で識別されるデータ (".class" ファイル、構成データ、イメージなど) です。 リソースは通常、アプリケーションまたはライブラリのコードで配置できるように、アプリケーションまたはライブラリと共にパッケージ化されます。 場合によっては、リソースが含まれるため、他のライブラリで配置できます。

ClassLoader クラスは、委任モデルを使用してクラスとリソースを検索します。 ClassLoaderの各インスタンスには、親クラス ローダーが関連付けられています。 クラスまたはリソースの検索を要求されると、通常、 ClassLoader インスタンスは、クラスまたはリソース自体を検索する前に、クラスまたはリソースの検索を親クラス ローダーに委任します。

クラスの同時読み込みをサポートするクラス ローダーは、 <em>#isRegisteredAsParallelCapable() parallel capable</em> クラス ローダーと呼ばれ、 #registerAsParallelCapable ClassLoader.registerAsParallelCapable メソッドを呼び出してクラスの初期化時に自身を登録する必要があります。 ClassLoader クラスは、既定で並列対応として登録されることに注意してください。 ただし、サブクラスが並列可能な場合は、そのサブクラス自体を登録する必要があります。 委任モデルが厳密に階層構造でない環境では、クラス ローダーは並列に対応している必要があります。そうしないと、クラスの読み込みプロセスの間、ローダー ロックが保持されるため、クラスの読み込みがデッドロックにつながる可能性があります ( #loadClass loadClass メソッドを参照)。

<h2> "builtinLoaders">実行時組み込みクラス ローダー</h2>

Javaランタイムには、次の組み込みのクラス ローダーがあります。

<ul><li>

ブートストラップ クラス ローダー。 これは仮想マシンの組み込みクラス ローダーであり、通常は nullとして表され、parent.</li><li>

#getSystemClassLoader() システム クラス ローダー。 <em>アプリケーション クラス ローダー</em> とも呼ばれ、プラットフォーム クラス ローダーとは異なります。 システム・クラス・ローダーは、通常、アプリケーション・クラス・パス、モジュール・パス、および JDK 固有のツールでクラスを定義するために使用されます。 プラットフォーム クラス ローダーはシステム クラス ローダーの親または先祖であるため、システム クラス ローダーは parent.< に委任してプラットフォーム クラスを読み込むことができます。/li></ul>

通常、Java仮想マシンは、プラットフォームに依存する方法でローカル ファイル システムからクラスを読み込みます。 ただし、一部のクラスはファイルから生成されない場合があります。これらは、ネットワークなどの他のソースから発生している場合もあれば、アプリケーションによって構築される場合もあります。 このメソッド #defineClass(String, byte[], int, int) defineClass 、バイト配列をクラス Classのインスタンスに変換します。 この新しく定義されたクラスのインスタンスは、 Class#newInstance Class.newInstanceを使用して作成できます。

クラス ローダーによって作成されたオブジェクトのメソッドとコンストラクターは、他のクラスを参照できます。 参照されるクラスを特定するために、Java仮想マシンは、最初にクラスを作成したクラス ローダーの#loadClass loadClass メソッドを呼び出します。

たとえば、アプリケーションは、サーバーからクラス ファイルをダウンロードするネットワーク クラス ローダーを作成できます。 サンプル コードは次のようになります。

<blockquote>

ClassLoader loader&nbsp;= new NetworkClassLoader(host,&nbsp;port);
              Object main&nbsp;= loader.loadClass("Main", true).newInstance();
                  &nbsp;.&nbsp;.&nbsp;.

</blockquote>

ネットワーク・クラス・ローダー・サブクラスは、ネットワークからクラスをロードするために #findClass findClass および loadClassData メソッドを定義する必要があります。 クラスを構成するバイトをダウンロードしたら、 #defineClass defineClass メソッドを使用してクラス インスタンスを作成する必要があります。 実装例は次のとおりです。

<blockquote>

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
                        &nbsp;.&nbsp;.&nbsp;.
                    }
                }

</blockquote>

<h3> "binary-name">Binary names</h3>

String内のメソッドにClassLoader パラメーターとして指定するクラス名は、<cite>Java 言語仕様</引用>で定義されているバイナリ名である必要があります。

有効なクラス名の例には、 <blockquote があります。>

"java.lang.String"
              "javax.swing.JSpinner$DefaultEditor"
              "java.security.KeyStore$Builder$FileBuilder$1"
              "java.net.URLClassLoader$3$1"

</blockquote>

String内のメソッドにClassLoader パラメーターとして指定されるパッケージ名は、空の文字列 (名前のないパッケージを示す) か、<cite>Java言語仕様</cite>で定義されている完全修飾名である必要があります。

1.0 で追加されました。

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

コンストラクター

名前 説明
ClassLoader()

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

ClassLoader(ClassLoader)

委任に指定された親クラス ローダーを使用して、新しいクラス ローダーを作成します。

ClassLoader(IntPtr, JniHandleOwnership)

JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。

プロパティ

名前 説明
Class

この Objectのランタイム クラスを返します。

(継承元 Object)
Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
JniIdentityHashCode

相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。

(継承元 Object)
JniManagedPeerState

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

(継承元 JavaObject)
JniPeerMembers

このJava ピアのメンバーを呼び出すために使用される JNI メタデータを取得します。

Parent

委任の親クラス ローダーを返します。

PeerReference

このJava ピアの JNI オブジェクト参照を取得します。

(継承元 Object)
SystemClassLoader

システム クラス ローダーを返します。

ThresholdClass

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

ThresholdType

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

メソッド

名前 説明
ClearAssertionStatus()

このクラス ローダーの既定のアサーション状態を false に設定し、クラス ローダーに関連付けられているパッケージの既定値またはクラス アサーション状態設定を破棄します。

Clone()

このオブジェクトのコピーを作成して返します。

(継承元 Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

(継承元 JavaObject)
DefineClass(Byte[], Int32, Int32)
古い.

バイトの配列をクラス Classのインスタンスに変換します。

DefineClass(String, Byte[], Int32, Int32, ProtectionDomain)

特定のClassを使用して、バイト配列をクラス ProtectionDomainのインスタンスに変換します。

DefineClass(String, Byte[], Int32, Int32)

バイトの配列をクラス Classのインスタンスに変換します。

DefineClass(String, ByteBuffer, ProtectionDomain)

指定したjava.nio.ByteBuffer ByteBufferを使用して、Classをクラス ProtectionDomainのインスタンスに変換します。

DefinePackage(String, String, String, String, String, String, String, URL)

この ClassLoaderの名前でパッケージを定義します。

Dispose()

このJava ピアによって保持されているリソースを解放します。

(継承元 Object)
Dispose(Boolean)

このJava ピアによって保持されているリソースを解放します。

(継承元 Object)
DisposeUnlessReferenced()

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

(継承元 JavaObject)
Equals(Object)

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

(継承元 JavaObject)
Equals(Object)

他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。

(継承元 Object)
FindClass(String)

指定したバイナリ名を持つクラスを検索します。

FindLibrary(String)

ネイティブ ライブラリの絶対パス名を返します。

FindLoadedClass(String)

このローダーが、そのバイナリ名を持つクラスの開始ローダーとしてJava仮想マシンによって記録されている場合は、指定されたバイナリ名を持つクラスを返します。

FindResource(String)

指定された名前のリソースを検索します。

FindResources(String)

指定した名前を持つすべてのリソースを表す java.net.URL URL オブジェクトの列挙体を返します。

FindSystemClass(String)

指定したバイナリ名を持つクラスを検索し、必要に応じて読み込みます。

GetHashCode()

オブジェクトのハッシュ コード値を返します。

(継承元 Object)
GetPackage(String)

このクラス ローダーとその先祖の名前でパッケージを検索します。

GetPackages()

このクラス ローダーとその先祖によって定義されているすべての Packageを返します。

GetResource(String)

指定された名前のリソースを検索します。

GetResourceAsStream(String)

指定したリソースを読み取るための入力ストリームを返します。

GetResources(String)

指定された名前を持つすべてのリソースを検索します。

GetSystemResource(String)

クラスの読み込みに使用する検索パスから、指定した名前のリソースを検索します。

GetSystemResourceAsStream(String)

クラスの読み込みに使用される検索パスから指定された名前のリソースを読み取るために開きます。

GetSystemResources(String)

クラスの読み込みに使用する検索パスから、指定した名前のすべてのリソースを検索します。

JavaFinalize()

オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。

(継承元 Object)
LoadClass(String, Boolean)

指定したバイナリ名を持つクラスを読み込みます。

LoadClass(String)

指定したバイナリ名を持つクラスを読み込みます。

LoadClassAsync(String, Boolean)

指定した名前のクラスを非同期的に読み込みます。

LoadClassAsync(String)

指定した名前のクラスを非同期的に読み込みます。

Notify()

このオブジェクトのモニターで待機している 1 つのスレッドを起動します。

(継承元 Object)
NotifyAll()

このオブジェクトのモニターで待機しているすべてのスレッドを起動します。

(継承元 Object)
RegisterAsParallelCapable()

呼び出し元を #isRegisteredAsParallelCapable() parallel capableとして登録します。

ResolveClass(Class)

指定したクラスをリンクします。

SetClassAssertionStatus(String, Boolean)

このクラス ローダー内の名前付き最上位クラスと、そこに含まれる入れ子になったクラスに必要なアサーションの状態を設定します。

SetDefaultAssertionStatus(Boolean)

このクラス ローダーの既定のアサーション状態を設定します。

SetHandle(IntPtr, JniHandleOwnership)

Handle プロパティを設定します。

(継承元 Object)
SetPackageAssertionStatus(String, Boolean)

名前付きパッケージのパッケージの既定のアサーション状態を設定します。

SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

(継承元 JavaObject)
SetSigners(Class, Object[])

クラスの署名者を設定します。

ToArray<T>()

このJava配列ラッパーからマネージド配列を作成します。

(継承元 Object)
ToString()

オブジェクトの文字列形式を返します。

(継承元 Object)
UnregisterFromRuntime()

相互運用ランタイムからこのJava ピアの登録を解除します。

(継承元 Object)
Wait()

現在のスレッドが起動するまで待機します。通常は、 <em>notified</em> または <em>interrupted</em>。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。

(継承元 Object)
Wait(Int64)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。

(継承元 Object)

明示的なインターフェイスの実装

名前 説明
IJavaPeerable.Disposed()

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

(継承元 JavaObject)
IJavaPeerable.Finalized()

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

(継承元 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

(継承元 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

(継承元 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

(継承元 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

(継承元 JavaObject)

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

クラス ローダーは、クラスの読み込みを担当するオブジェクトです。

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象