ClassLoader Class
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
A class loader is an object that is responsible for loading classes.
[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
- Inheritance
- Derived
- Attributes
Remarks
A class loader is an object that is responsible for loading classes. The class ClassLoader
is an abstract class. Given the binary name of a class, a class loader should attempt to locate or generate data that constitutes a definition for the class. A typical strategy is to transform the name into a file name and then read a "class file" of that name from a file system.
Every Class <tt>Class</tt>
object contains a Class#getClassLoader() reference
to the ClassLoader
that defined it.
Class
objects for array classes are not created by class loaders, but are created automatically as required by the Java runtime. The class loader for an array class, as returned by Class#getClassLoader()
is the same as the class loader for its element type; if the element type is a primitive type, then the array class has no class loader.
Applications implement subclasses of ClassLoader
in order to extend the manner in which the Java virtual machine dynamically loads classes.
Class loaders may typically be used by security managers to indicate security domains.
The ClassLoader
class uses a delegation model to search for classes and resources. Each instance of ClassLoader
has an associated parent class loader. When requested to find a class or resource, a ClassLoader
instance will delegate the search for the class or resource to its parent class loader before attempting to find the class or resource itself. The virtual machine's built-in class loader, called the "bootstrap class loader", does not itself have a parent but may serve as the parent of a ClassLoader
instance.
Class loaders that support concurrent loading of classes are known as <em>parallel capable</em> class loaders and are required to register themselves at their class initialization time by invoking the #registerAsParallelCapable <tt>ClassLoader.registerAsParallelCapable</tt>
method. Note that the ClassLoader
class is registered as parallel capable by default. However, its subclasses still need to register themselves if they are parallel capable. <br> In environments in which the delegation model is not strictly hierarchical, class loaders need to be parallel capable, otherwise class loading can lead to deadlocks because the loader lock is held for the duration of the class loading process (see #loadClass <tt>loadClass</tt>
methods).
Normally, the Java virtual machine loads classes from the local file system in a platform-dependent manner. For example, on UNIX systems, the virtual machine loads classes from the directory defined by the CLASSPATH
environment variable.
However, some classes may not originate from a file; they may originate from other sources, such as the network, or they could be constructed by an application. The method #defineClass(String, byte[], int, int) <tt>defineClass</tt>
converts an array of bytes into an instance of class Class
. Instances of this newly defined class can be created using Class#newInstance <tt>Class.newInstance</tt>
.
The methods and constructors of objects created by a class loader may reference other classes. To determine the class(es) referred to, the Java virtual machine invokes the #loadClass <tt>loadClass</tt>
method of the class loader that originally created the class.
For example, an application could create a network class loader to download class files from a server. Sample code might look like:
<blockquote>
ClassLoader loader = new NetworkClassLoader(host, port);
Object main = loader.loadClass("Main", true).newInstance();
. . .
</blockquote>
The network class loader subclass must define the methods #findClass <tt>findClass</tt>
and loadClassData
to load a class from the network. Once it has downloaded the bytes that make up the class, it should use the method #defineClass <tt>defineClass</tt>
to create a class instance. A sample implementation is:
<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">Binary names</h3>
Any class name provided as a String
parameter to methods in ClassLoader
must be a binary name as defined by <cite>The Java™ Language Specification</cite>.
Examples of valid class names include: <blockquote>
"java.lang.String"
"javax.swing.JSpinner$DefaultEditor"
"java.security.KeyStore$Builder$FileBuilder$1"
"java.net.URLClassLoader$3$1"
</blockquote>
Added in 1.0.
Java documentation for java.lang.ClassLoader
.
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
Constructors
ClassLoader() |
Creates a new class loader using the |
ClassLoader(ClassLoader) |
Creates a new class loader using the specified parent class loader for delegation. |
ClassLoader(IntPtr, JniHandleOwnership) |
A constructor used when creating managed representations of JNI objects; called by the runtime. |
Properties
Class |
Returns the runtime class of this |
Handle |
The handle to the underlying Android instance. (Inherited from Object) |
JniIdentityHashCode | (Inherited from Object) |
JniPeerMembers | |
Parent |
Returns the parent class loader for delegation. |
PeerReference | (Inherited from Object) |
SystemClassLoader |
Returns the system class loader for delegation. |
ThresholdClass |
This API supports the Mono for Android infrastructure and is not intended to be used directly from your code. |
ThresholdType |
This API supports the Mono for Android infrastructure and is not intended to be used directly from your code. |
Methods
ClearAssertionStatus() |
Sets the default assertion status for this class loader to
|
Clone() |
Creates and returns a copy of this object. (Inherited from Object) |
DefineClass(Byte[], Int32, Int32) |
Obsolete.
Converts an array of bytes into an instance of class |
DefineClass(String, Byte[], Int32, Int32, ProtectionDomain) |
Converts an array of bytes into an instance of class |
DefineClass(String, Byte[], Int32, Int32) |
Converts an array of bytes into an instance of class |
DefineClass(String, ByteBuffer, ProtectionDomain) |
Converts a |
DefinePackage(String, String, String, String, String, String, String, URL) |
Defines a package by name in this |
Dispose() | (Inherited from Object) |
Dispose(Boolean) | (Inherited from Object) |
Equals(Object) |
Indicates whether some other object is "equal to" this one. (Inherited from Object) |
FindClass(String) |
Finds the class with the specified binary name. |
FindLibrary(String) |
Returns the absolute path name of a native library. |
FindLoadedClass(String) |
Returns the class with the given binary name if this loader has been recorded by the Java virtual machine as an initiating loader of a class with that binary name. |
FindResource(String) |
Finds the resource with the given name. |
FindResources(String) |
Returns an enumeration of |
FindSystemClass(String) |
Finds a class with the specified binary name, loading it if necessary. |
GetHashCode() |
Returns a hash code value for the object. (Inherited from Object) |
GetPackage(String) |
Returns a |
GetPackages() |
Returns all of the |
GetResource(String) |
Finds the resource with the given name. |
GetResourceAsStream(String) |
Returns an input stream for reading the specified resource. |
GetResources(String) |
Finds all the resources with the given name. |
GetSystemResource(String) |
Find a resource of the specified name from the search path used to load classes. |
GetSystemResourceAsStream(String) |
Open for reading, a resource of the specified name from the search path used to load classes. |
GetSystemResources(String) |
Finds all resources of the specified name from the search path used to load classes. |
JavaFinalize() |
Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. (Inherited from Object) |
LoadClass(String, Boolean) |
Loads the class with the specified binary name. |
LoadClass(String) |
Loads the class with the specified binary name. |
LoadClassAsync(String, Boolean) | |
LoadClassAsync(String) | |
Notify() |
Wakes up a single thread that is waiting on this object's monitor. (Inherited from Object) |
NotifyAll() |
Wakes up all threads that are waiting on this object's monitor. (Inherited from Object) |
RegisterAsParallelCapable() |
Registers the caller as parallel capable. |
ResolveClass(Class) |
Links the specified class. |
SetClassAssertionStatus(String, Boolean) |
Sets the desired assertion status for the named top-level class in this class loader and any nested classes contained therein. |
SetDefaultAssertionStatus(Boolean) |
Sets the default assertion status for this class loader. |
SetHandle(IntPtr, JniHandleOwnership) |
Sets the Handle property. (Inherited from Object) |
SetPackageAssertionStatus(String, Boolean) |
Sets the package default assertion status for the named package. |
SetSigners(Class, Object[]) |
Sets the signers of a class. |
ToArray<T>() | (Inherited from Object) |
ToString() |
Returns a string representation of the object. (Inherited from Object) |
UnregisterFromRuntime() | (Inherited from Object) |
Wait() |
Causes the current thread to wait until it is awakened, typically by being <em>notified</em> or <em>interrupted</em>. (Inherited from Object) |
Wait(Int64, Int32) |
Causes the current thread to wait until it is awakened, typically by being <em>notified</em> or <em>interrupted</em>, or until a certain amount of real time has elapsed. (Inherited from Object) |
Wait(Int64) |
Causes the current thread to wait until it is awakened, typically by being <em>notified</em> or <em>interrupted</em>, or until a certain amount of real time has elapsed. (Inherited from Object) |
Explicit Interface Implementations
IJavaPeerable.Disposed() | (Inherited from Object) |
IJavaPeerable.DisposeUnlessReferenced() | (Inherited from Object) |
IJavaPeerable.Finalized() | (Inherited from Object) |
IJavaPeerable.JniManagedPeerState | (Inherited from Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) | (Inherited from Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) | (Inherited from Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) | (Inherited from Object) |
Extension Methods
JavaCast<TResult>(IJavaObject) |
Performs an Android runtime-checked type conversion. |
JavaCast<TResult>(IJavaObject) | |
GetJniTypeName(IJavaPeerable) |