ClassLoader Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist.
[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
- Vererbung
- Abgeleitet
- Attribute
Hinweise
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. Die Klasse ClassLoader ist eine abstrakte Klasse. Angesichts des binären Namens einer Klasse sollte ein Klassenladeprogramm versuchen, Daten zu suchen oder zu generieren, die eine Definition für die Klasse darstellen. Eine typische Strategie besteht darin, den Namen in einen Dateinamen zu transformieren und dann eine "Klassendatei" dieses Namens aus einem Dateisystem zu lesen.
Jedes java.lang.Class Class Objekt enthält ein Class#getClassLoader() reference Objekt, das ClassLoader es definiert hat.
ClassObjekte für Arrayklassen werden nicht durch Klassenladeprogramme erstellt, sondern automatisch nach Bedarf für die Java Laufzeit erstellt. Das Klassenladeprogramm für eine Arrayklasse, wie von dieser zurückgegeben Class#getClassLoader() wird, entspricht dem Klassenladeprogramm für den Elementtyp. Wenn der Elementtyp ein Grundtyp ist, verfügt die Arrayklasse über kein Klassenladeprogramm.
Anwendungen implementieren Unterklassen, ClassLoader um die Art und Weise zu erweitern, in der der Java virtuellen Computer Klassen dynamisch lädt.
Klassenladeprogramme können in der Regel von Sicherheitsmanagern verwendet werden, um Sicherheitsdomänen anzugeben.
Neben dem Laden von Klassen ist ein Klassenladeprogramm auch für das Auffinden von Ressourcen verantwortlich. Eine Ressource ist einige Daten (z. B. eine ".class" Datei, Konfigurationsdaten oder ein Bild), die mit einem abstrakten "/"-getrennten Pfadnamen identifiziert werden. Ressourcen werden in der Regel mit einer Anwendung oder Bibliothek gepackt, sodass sie im Code in der Anwendung oder Bibliothek gespeichert werden können. In einigen Fällen sind die Ressourcen enthalten, damit sie von anderen Bibliotheken gefunden werden können.
Die ClassLoader Klasse verwendet ein Delegierungsmodell, um nach Klassen und Ressourcen zu suchen. Jede Instanz verfügt ClassLoader über ein zugeordnetes übergeordnetes Klassenladeprogramm. Wenn Sie aufgefordert werden, eine Klasse oder Ressource zu finden, delegieren eine ClassLoader Instanz in der Regel die Suche nach der Klasse oder Ressource an das übergeordnete Klassenladeprogramm, bevor Sie versuchen, die Klasse oder Ressource selbst zu finden.
Klassenladeprogramme, die gleichzeitiges Laden von Klassen unterstützen, werden als <em>#isRegisteredAsParallelCapable() parallel capable</em-Klassenladeprogramme> bezeichnet und müssen sich bei der Klasseninitialisierungszeit registrieren, indem sie die #registerAsParallelCapable ClassLoader.registerAsParallelCapable Methode aufrufen. Beachten Sie, dass die ClassLoader Klasse standardmäßig parallel registriert ist. Ihre Unterklassen müssen sich jedoch weiterhin registrieren, wenn sie parallelfähig sind. In Umgebungen, in denen das Delegierungsmodell nicht streng hierarchisch ist, müssen Klassenladeprogramme parallel sein, andernfalls kann das Laden von Klassen zu Deadlocks führen, da die Ladesperre für die Dauer des Klassenladevorgangs gehalten wird (siehe #loadClass loadClass Methoden).
<h2> "builtinLoaders">Laufzeit integrierte Klassenladeprogramme</h2>
Die Java Laufzeit verfügt über die folgenden integrierten Klassenladeprogramme:
<ul><li>
Bootstrap-Klassenladeprogramm. Es handelt sich um das integrierte Klassenladeprogramm des virtuellen Computers, das normalerweise als null" dargestellt" dargestellt wird und nicht über ein übergeordnetes Element verfügt.</li li><>
#getSystemClassLoader() Systemklassenladeprogramm. Es wird auch als <em-Anwendungsklassenladeprogramm></em> bezeichnet und unterscheidet sich vom Plattformklassenladeprogramm. Das Systemklassenladeprogramm wird in der Regel verwendet, um Klassen für den Anwendungsklassenpfad, Modulpfad und JDK-spezifische Tools zu definieren. Das Plattformklassenladeprogramm ist das übergeordnete Element oder ein Vorgänger des Systemklassenladeprogramm, sodass das Systemklassenladeprogramm Plattformklassen laden kann, indem er an das übergeordnete Element delegiert wird.</li></ul>
Normalerweise lädt der Java virtuellen Computer Klassen aus dem lokalen Dateisystem plattformabhängig. Einige Klassen stammen jedoch möglicherweise nicht aus einer Datei; sie können aus anderen Quellen stammen, z. B. aus dem Netzwerk, oder sie könnten von einer Anwendung erstellt werden. Die Methode #defineClass(String, byte[], int, int) defineClass konvertiert ein Bytearray in eine Instanz der Klasse Class. Instanzen dieser neu definierten Klasse können mithilfe Class#newInstance Class.newInstancevon .
Die Methoden und Konstruktoren von Objekten, die von einem Klassenladeprogramm erstellt wurden, können auf andere Klassen verweisen. Um die klasse(n) zu ermitteln, auf die verwiesen wird, ruft der Java virtuellen Computer die #loadClass loadClass Methode des Klassenladeprogramms auf, das ursprünglich die Klasse erstellt hat.
Beispielsweise könnte eine Anwendung ein Netzwerkklassenladeprogramm erstellen, um Klassendateien von einem Server herunterzuladen. Beispielcode sieht möglicherweise wie folgt aus:
<Blockquote>
ClassLoader loader = new NetworkClassLoader(host, port);
Object main = loader.loadClass("Main", true).newInstance();
. . .
</blockquote>
Die Unterklasse für das Netzwerkklassenladeprogramm muss die Methoden #findClass findClass definieren und loadClassData eine Klasse aus dem Netzwerk laden. Nachdem sie die Bytes heruntergeladen hat, aus denen die Klasse besteht, sollte sie die Methode #defineClass defineClass verwenden, um eine Klasseninstanz zu erstellen. Eine Beispielimplementierung ist:
<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
. . .
}
}
</blockquote>
<h3> "binary-name">Binary names</h3>
Jeder Klassenname, der als String Parameter für Methoden ClassLoader angegeben wird, muss ein binärer Name sein, wie durch <Zitate>"The Java Language Specification</cite>" definiert.
Beispiele für gültige Klassennamen sind: <Blockquote>
"java.lang.String"
"javax.swing.JSpinner$DefaultEditor"
"java.security.KeyStore$Builder$FileBuilder$1"
"java.net.URLClassLoader$3$1"
</blockquote>
Jeder Paketname, der als String Parameter für Methoden ClassLoader angegeben wird, muss entweder die leere Zeichenfolge (mit dem Namen eines nicht benannten Pakets) oder ein vollqualifizierter Name sein, der durch <Zitate>"The Java Language Specification</cite>" definiert wurde.
In 1.0 hinzugefügt.
Java Dokumentation für java.lang.ClassLoader.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.
Konstruktoren
| Name | Beschreibung |
|---|---|
| ClassLoader() |
Erstellt ein neues Klassenladeprogramm, das |
| ClassLoader(ClassLoader) |
Erstellt ein neues Klassenladeprogramm mit dem angegebenen übergeordneten Klassenladeprogramm für die Delegierung. |
| ClassLoader(IntPtr, JniHandleOwnership) |
Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von JNI-Objekten verwendet wird; wird von der Laufzeit aufgerufen. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Class |
Gibt die Laufzeitklasse dieses Werts |
| Handle |
Das Handle für die zugrunde liegende Android-Instanz. (Geerbt von Object) |
| JniIdentityHashCode |
Ruft den Identitätshashcode ab, der diesem Java Peer von der Interop-Laufzeit zugewiesen ist. (Geerbt von Object) |
| JniManagedPeerState |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von JavaObject) |
| JniPeerMembers |
Ruft die JNI-Metadaten ab, die zum Aufrufen von Mitgliedern dieses Java Peers verwendet werden. |
| Parent |
Gibt das übergeordnete Klassenladeprogramm für die Delegierung zurück. |
| PeerReference |
Ruft den JNI-Objektverweis für diesen Java Peer ab. (Geerbt von Object) |
| SystemClassLoader |
Gibt das Systemklassenladeprogramm zurück. |
| ThresholdClass |
Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. |
| ThresholdType |
Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. |
Methoden
| Name | Beschreibung |
|---|---|
| ClearAssertionStatus() |
Legt den Standard assertionsstatus für dieses Klassenladeprogramm fest und |
| Clone() |
Erstellt und gibt eine Kopie dieses Objekts zurück. (Geerbt von Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von JavaObject) |
| DefineClass(Byte[], Int32, Int32) |
Veraltet.
Wandelt ein Bytearray in eine Instanz der Klasse |
| DefineClass(String, Byte[], Int32, Int32, ProtectionDomain) |
Konvertiert ein Bytearray in eine Instanz der Klasse |
| DefineClass(String, Byte[], Int32, Int32) |
Wandelt ein Bytearray in eine Instanz der Klasse |
| DefineClass(String, ByteBuffer, ProtectionDomain) |
Konvertiert eine |
| DefinePackage(String, String, String, String, String, String, String, URL) |
Definiert ein Paket anhand des Namens in diesem |
| Dispose() |
Veröffentlicht die Ressourcen, die von diesem Java Peer gehalten werden. (Geerbt von Object) |
| Dispose(Boolean) |
Veröffentlicht die Ressourcen, die von diesem Java Peer gehalten werden. (Geerbt von Object) |
| DisposeUnlessReferenced() |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von JavaObject) |
| Equals(Object) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von JavaObject) |
| Equals(Object) |
Gibt an, ob ein anderes Objekt "gleich" diesem Objekt ist. (Geerbt von Object) |
| FindClass(String) |
Sucht die Klasse mit dem angegebenen binären Namen. |
| FindLibrary(String) |
Gibt den absoluten Pfadnamen einer systemeigenen Bibliothek zurück. |
| FindLoadedClass(String) |
Gibt die Klasse mit dem angegebenen binären Namen zurück, wenn dieses Ladeprogramm vom Java virtuellen Computer als initiierendes Ladeprogramm einer Klasse mit diesem binären Namen aufgezeichnet wurde. |
| FindResource(String) |
Sucht die Ressource mit dem angegebenen Namen. |
| FindResources(String) |
Gibt eine Aufzählung von |
| FindSystemClass(String) |
Sucht eine Klasse mit dem angegebenen binären Namen und lädt sie bei Bedarf. |
| GetHashCode() |
Gibt einen Hashcodewert für das Objekt zurück. (Geerbt von Object) |
| GetPackage(String) |
Sucht ein Paket anhand des Namens in diesem Klassenladeprogramm und seinen Vorgängern. |
| GetPackages() |
Gibt alle s zurück, die |
| GetResource(String) |
Sucht die Ressource mit dem angegebenen Namen. |
| GetResourceAsStream(String) |
Gibt einen Eingabedatenstrom zum Lesen der angegebenen Ressource zurück. |
| GetResources(String) |
Sucht alle Ressourcen mit dem angegebenen Namen. |
| GetSystemResource(String) |
Suchen Sie eine Ressource des angegebenen Namens aus dem Suchpfad, der zum Laden von Klassen verwendet wird. |
| GetSystemResourceAsStream(String) |
Zum Lesen öffnen, eine Ressource des angegebenen Namens aus dem Suchpfad, der zum Laden von Klassen verwendet wird. |
| GetSystemResources(String) |
Sucht alle Ressourcen des angegebenen Namens aus dem Suchpfad, der zum Laden von Klassen verwendet wird. |
| JavaFinalize() |
Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection bestimmt, dass keine weiteren Verweise auf das Objekt vorhanden sind. (Geerbt von Object) |
| LoadClass(String, Boolean) |
Lädt die Klasse mit dem angegebenen binären Namen. |
| LoadClass(String) |
Lädt die Klasse mit dem angegebenen binären Namen. |
| LoadClassAsync(String, Boolean) |
Lädt die Klasse asynchron mit dem angegebenen Namen. |
| LoadClassAsync(String) |
Lädt die Klasse asynchron mit dem angegebenen Namen. |
| Notify() |
Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet. (Geerbt von Object) |
| NotifyAll() |
Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten. (Geerbt von Object) |
| RegisterAsParallelCapable() |
Registriert den Anrufer als |
| ResolveClass(Class) |
Verknüpft die angegebene Klasse. |
| SetClassAssertionStatus(String, Boolean) |
Legt den gewünschten Assertionsstatus für die benannte Klasse der obersten Ebene in diesem Klassenladeprogramm und alle darin enthaltenen geschachtelten Klassen fest. |
| SetDefaultAssertionStatus(Boolean) |
Legt den Standard assertionsstatus für dieses Klassenladeprogramm fest. |
| SetHandle(IntPtr, JniHandleOwnership) |
Legt die Handle-Eigenschaft fest. (Geerbt von Object) |
| SetPackageAssertionStatus(String, Boolean) |
Legt den Paketstandard assertionsstatus für das benannte Paket fest. |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von JavaObject) |
| SetSigners(Class, Object[]) |
Legt die Signierer einer Klasse fest. |
| ToArray<T>() |
Erstellt ein verwaltetes Array aus diesem Java Arraywrapper. (Geerbt von Object) |
| ToString() |
Gibt eine Zeichenfolgendarstellung des Objekts zurück. (Geerbt von Object) |
| UnregisterFromRuntime() |
Hebt die Registrierung dieses Java Peers aus der Interop-Laufzeit auf. (Geerbt von Object) |
| Wait() |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch em benachrichtigt/em< oder >em<unterbrochen>/em<.><> (Geerbt von Object) |
| Wait(Int64, Int32) |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
| Wait(Int64) |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| IJavaPeerable.Disposed() |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von JavaObject) |
| IJavaPeerable.Finalized() |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von JavaObject) |
Erweiterungsmethoden
| Name | Beschreibung |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Ruft den JNI-Namen des Typs der Instanz |
| JavaAs<TResult>(IJavaPeerable) |
Versuchen Sie, die Eingabe |
| JavaCast<TResult>(IJavaObject) |
Führt eine android-laufzeitgecheckte Typkonvertierung aus. |
| JavaCast<TResult>(IJavaObject) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Versuchen Sie, die Eingabe |