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 Class <tt>Class</tt>
Objekt enthält ein Class#getClassLoader() reference
bis zum, das ClassLoader
es definiert hat.
Class
Objekte für Arrayklassen werden nicht von Klassenladeprogrammen erstellt, sondern automatisch erstellt, wie von der Java-Runtime erforderlich. Der Klassenladeer für eine Arrayklasse, wie von Class#getClassLoader()
zurückgegeben wird, ist mit dem Klassenladeprogramm für seinen Elementtyp identisch. Wenn der Elementtyp ein primitiver Typ ist, verfügt die Arrayklasse über keinen Klassenladevorgang.
Anwendungen implementieren Unterklassen von, ClassLoader
um die Art und Weise zu erweitern, in der der virtuelle Java-Computer Klassen dynamisch lädt.
Klassenladeprogramme können in der Regel von Sicherheitsmanagern verwendet werden, um Sicherheitsdomänen anzugeben.
Die ClassLoader
-Klasse verwendet ein Delegierungsmodell, um nach Klassen und Ressourcen zu suchen. Jede instance von ClassLoader
verfügt über ein zugeordnetes übergeordnetes Klassenladeprogramm. Wenn eine Klasse oder Ressource gesucht werden soll, delegieren instance ClassLoader
die Suche nach der Klasse oder Ressource an den übergeordneten Klassenladeprogramm, bevor sie versucht, die Klasse oder Ressource selbst zu finden. Das integrierte Klassenladeprogramm des virtuellen Computers, der als "Bootstrap-Klassenladeprogramm" bezeichnet wird, verfügt selbst nicht über ein übergeordnetes Element, sondern kann als übergeordnetes Element einer ClassLoader
instance dienen.
Klassenladeprogramme, die das gleichzeitige< Laden von Klassen unterstützen, werden als <em>parallelfähige/em-Klassenladeprogramme> bezeichnet und müssen sich zum Zeitpunkt der Klasseninitialisierung registrieren, indem die #registerAsParallelCapable <tt>ClassLoader.registerAsParallelCapable</tt>
Methode aufgerufen wird. Beachten Sie, dass die ClassLoader
Klasse standardmäßig als parallelfähig registriert ist. Ihre Unterklassen müssen sich jedoch weiterhin registrieren, wenn sie parallel fähig sind. <br> In Umgebungen, in denen das Delegierungsmodell nicht streng hierarchisch ist, müssen Klassenladevorgänge parallel fähig sein. Andernfalls kann das Laden von Klassen zu Deadlocks führen, da die Ladesperre für die Dauer des Klassenladevorgangs gehalten wird (siehe #loadClass <tt>loadClass</tt>
Methoden).
Normalerweise lädt der virtuelle Java-Computer Klassen plattformabhängig aus dem lokalen Dateisystem. Auf UNIX-Systemen lädt der virtuelle Computer beispielsweise Klassen aus dem verzeichnis, das von der Umgebungsvariablen CLASSPATH
definiert wird.
Einige Klassen stammen jedoch möglicherweise nicht aus einer Datei. sie können aus anderen Quellen wie dem Netzwerk stammen oder von einer Anwendung erstellt werden. Die -Methode #defineClass(String, byte[], int, int) <tt>defineClass</tt>
konvertiert ein Array von Bytes in ein instance der Klasse Class
. Instanzen dieser neu definierten Klasse können mit Class#newInstance <tt>Class.newInstance</tt>
erstellt werden.
Die Methoden und Konstruktoren von Objekten, die von einem Klassenladeprogramm erstellt wurden, verweisen möglicherweise auf andere Klassen. Um die klasse(en) zu bestimmen, auf die verwiesen wird, ruft der virtuelle Java-Computer die #loadClass <tt>loadClass</tt>
Methode des Klassenladeprogramms auf, von dem die Klasse ursprünglich erstellt wurde.
Beispielsweise könnte eine Anwendung ein Netzwerkklassenladeprogramm erstellen, um Klassendateien von einem Server herunterzuladen. Beispielcode könnte wie folgt aussehen:
<Blockquote>
ClassLoader loader = new NetworkClassLoader(host, port);
Object main = loader.loadClass("Main", true).newInstance();
. . .
</Blockquote>
Die Unterklasse des Netzwerkklassenladeers muss die Methoden #findClass <tt>findClass</tt>
und loadClassData
zum Laden einer Klasse aus dem Netzwerk definieren. Nachdem die Bytes heruntergeladen wurden, aus denen die Klasse besteht, sollte die -Methode #defineClass <tt>defineClass</tt>
verwendet werden, um eine Klasse instance 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> "Name">Binärnamen</h3>
Jeder Klassenname, der als String
Parameter für Methoden in ClassLoader
bereitgestellt wird, muss ein binärer Name sein, der durch <cite>The Java&trade definiert ist. Sprachspezifikation</Cite>.
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>
In 1.0 hinzugefügt.
Java-Dokumentation für java.lang.ClassLoader
.
Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In der Attribution License beschriebenen Begriffen verwendet werden.
Konstruktoren
ClassLoader() |
Erstellt ein neues Klassenladeprogramm unter Verwendung des |
ClassLoader(ClassLoader) |
Erstellt einen neuen 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 Runtime aufgerufen. |
Eigenschaften
Class |
Gibt die Laufzeitklasse dieses |
Handle |
Das Handle zum zugrunde liegenden Android-instance. (Geerbt von Object) |
JniIdentityHashCode |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
JniPeerMembers |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. |
Parent |
Gibt den übergeordneten Klassenladevorgang für die Delegierung zurück. |
PeerReference |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
SystemClassLoader |
Gibt das Systemklassenladeprogramm für die Delegierung 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
ClearAssertionStatus() |
Legt die Standardassertion status für dieses Klassenladeprogramm auf |
Clone() |
Erstellt und gibt eine Kopie dieses Objekts zurück. (Geerbt von Object) |
DefineClass(Byte[], Int32, Int32) |
Veraltet.
Konvertiert ein Array von Bytes in ein instance der Klasse |
DefineClass(String, Byte[], Int32, Int32) |
Konvertiert ein Array von Bytes in ein instance der Klasse |
DefineClass(String, Byte[], Int32, Int32, ProtectionDomain) |
Konvertiert ein Array von Bytes in ein instance 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() |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
Dispose(Boolean) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
Equals(Object) |
Gibt an, ob ein anderes Objekt diesem "gleich" ist. (Geerbt von Object) |
FindClass(String) |
Sucht die Klasse mit dem angegebenen Binärnamen. |
FindLibrary(String) |
Gibt den absoluten Pfadnamen einer nativen Bibliothek zurück. |
FindLoadedClass(String) |
Gibt die Klasse mit dem angegebenen binären Namen zurück, wenn dieser Ladevorgang vom virtuellen Java-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 Enumeration von |
FindSystemClass(String) |
Sucht eine Klasse mit dem angegebenen Binärnamen und lädt sie bei Bedarf. |
GetHashCode() |
Gibt einen Hashcodewert für das Objekt zurück. (Geerbt von Object) |
GetPackage(String) |
Gibt einen |
GetPackages() |
Gibt alle |
GetResource(String) |
Sucht die Ressource mit dem angegebenen Namen. |
GetResourceAsStream(String) |
Gibt einen Eingabestream zum Lesen der angegebenen Ressource zurück. |
GetResources(String) |
Sucht alle Ressourcen mit dem angegebenen Namen. |
GetSystemResource(String) |
Suchen Sie eine Ressource mit dem angegebenen Namen aus dem Suchpfad, der zum Laden von Klassen verwendet wird. |
GetSystemResourceAsStream(String) |
Zum Lesen geöffnet, eine Ressource mit dem angegebenen Namen 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 feststellt, dass keine Verweise mehr auf das Objekt vorhanden sind. (Geerbt von Object) |
LoadClass(String) |
Lädt die Klasse mit dem angegebenen Binärnamen. |
LoadClass(String, Boolean) |
Lädt die Klasse mit dem angegebenen Binärnamen. |
LoadClassAsync(String) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. |
LoadClassAsync(String, Boolean) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. |
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 Aufrufer als parallelfähig. |
ResolveClass(Class) |
Verknüpft die angegebene Klasse. |
SetClassAssertionStatus(String, Boolean) |
Legt die gewünschte Assertion status für die benannte Klasse der obersten Ebene in diesem Klassenladeprogramm und alle darin enthaltenen geschachtelten Klassen fest. |
SetDefaultAssertionStatus(Boolean) |
Legt die Standardassertion status für dieses Klassenladeprogramm fest. |
SetHandle(IntPtr, JniHandleOwnership) |
Legt die Handle-Eigenschaft fest. (Geerbt von Object) |
SetPackageAssertionStatus(String, Boolean) |
Legt die Standardassertion des Pakets status für das benannte Paket fest. |
SetSigners(Class, Object[]) |
Legt die Signierer einer Klasse fest. |
ToArray<T>() |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
ToString() |
Gibt eine Zeichenfolgendarstellung des Objekts zurück. (Geerbt von Object) |
UnregisterFromRuntime() |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
Wait() |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel durch em benachrichtigen/em> oder <em>interrupted</em>.<>< (Geerbt von Object) |
Wait(Int64) |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Wait(Int64, Int32) |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
IJavaPeerable.Disposed() |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
IJavaPeerable.DisposeUnlessReferenced() |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
IJavaPeerable.Finalized() |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
IJavaPeerable.JniManagedPeerState |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. (Geerbt von Object) |
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine Für Android-Runtime überprüfte Typkonvertierung aus. |
JavaCast<TResult>(IJavaObject) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. |
GetJniTypeName(IJavaPeerable) |
Ein Klassenladeprogramm ist ein Objekt, das für das Laden von Klassen verantwortlich ist. |