ClassLoader 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
类加载程序是负责加载类的对象。
[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
是抽象类。 给定类的二进制名称,类加载程序应尝试查找或生成构成类定义的数据。 典型的策略是将名称转换为文件名,然后从文件系统读取该名称的“类文件”。
每个 对象都包含Class <tt>Class</tt>
Class#getClassLoader() reference
对ClassLoader
定义它的 的 。
Class
数组类的对象不是由类加载程序创建的,而是根据 Java 运行时的要求自动创建的。 数组类的类加载程序(如 返回) Class#getClassLoader()
与其元素类型的类加载程序相同;如果元素类型为基元类型,则数组类没有类加载程序。
应用程序实现 的 ClassLoader
子类,以便扩展 Java 虚拟机动态加载类的方式。
安全管理器通常可以使用类加载程序来指示安全域。
类 ClassLoader
使用委派模型来搜索类和资源。 的每个实例 ClassLoader
都有一个关联的父类加载程序。 当请求查找类或资源时, ClassLoader
实例会在尝试查找类或资源本身之前将类或资源的搜索委托给其父类加载程序。 虚拟机的内置类加载程序(称为“bootstrap 类加载程序”)本身没有父级,但可以充当实例的父级 ClassLoader
。
支持类并发加载的类加载程序称为<支持<并行>的类加载程序/em> 类加载程序,并且需要通过调用 #registerAsParallelCapable <tt>ClassLoader.registerAsParallelCapable</tt>
方法在其类初始化时自行注册。 请注意, ClassLoader
类默认注册为支持并行。 但是,如果其子类支持并行,则仍需要自行注册。 <br> 在委托模型不严格分层的环境中,类加载程序需要能够并行执行,否则类加载可能会导致死锁,因为加载程序锁在类加载过程的持续时间内保留 (查看 #loadClass <tt>loadClass</tt>
方法) 。
通常,Java 虚拟机以依赖于平台的方式从本地文件系统加载类。 例如,在 UNIX 系统上,虚拟机从 环境变量定义的 CLASSPATH
目录中加载类。
但是,某些类可能不是源自文件;它们可能源自其他源(例如网络),也可以由应用程序构造。 方法 #defineClass(String, byte[], int, int) <tt>defineClass</tt>
将字节数组转换为类 Class
的实例。 可以使用 创建此新定义的类的 Class#newInstance <tt>Class.newInstance</tt>
实例。
类加载程序创建的 对象的方法和构造函数可以引用其他类。 为了确定) 引用的类 (es,Java 虚拟机调用 #loadClass <tt>loadClass</tt>
最初创建类的类加载程序的方法。
例如,应用程序可以创建网络类加载程序以从服务器下载类文件。 示例代码可能如下所示:
<blockquote>
ClassLoader loader = new NetworkClassLoader(host, port);
Object main = loader.loadClass("Main", true).newInstance();
. . .
</blockquote>
网络类加载程序子类必须定义 方法和 #findClass <tt>findClass</tt>
loadClassData
才能从网络加载类。 下载构成类的字节后,它应使用 方法 #defineClass <tt>defineClass</tt>
创建类实例。 示例实现为:
<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”>二进制名称</h3>
作为 String
中ClassLoader
方法的参数提供的任何类名必须是引用>Java&交易所定义的<二进制名称;语言规范</引用>。
有效类名的示例包括: <blockquote>
"java.lang.String"
"javax.swing.JSpinner$DefaultEditor"
"java.security.KeyStore$Builder$FileBuilder$1"
"java.net.URLClassLoader$3$1"
</blockquote>
在 1.0 中添加。
的 java.lang.ClassLoader
Java 文档。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
构造函数
ClassLoader() |
使用 |
ClassLoader(ClassLoader) |
使用用于委派的指定父类加载程序创建新的类加载程序。 |
ClassLoader(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
属性
Class |
返回此 |
Handle |
基础 Android 实例的句柄。 (继承自 Object) |
JniIdentityHashCode |
类加载程序是负责加载类的对象。 (继承自 Object) |
JniPeerMembers |
类加载程序是负责加载类的对象。 |
Parent |
返回用于委派的父类加载程序。 |
PeerReference |
类加载程序是负责加载类的对象。 (继承自 Object) |
SystemClassLoader |
返回用于委派的系统类加载程序。 |
ThresholdClass |
此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。 |
ThresholdType |
此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。 |
方法
ClearAssertionStatus() |
将此类加载程序的默认断言状态设置为 |
Clone() |
创建并返回此对象的副本。 (继承自 Object) |
DefineClass(Byte[], Int32, Int32) |
已过时.
将字节数组转换为 类 |
DefineClass(String, Byte[], Int32, Int32) |
将字节数组转换为 类 |
DefineClass(String, Byte[], Int32, Int32, ProtectionDomain) |
使用可选的 |
DefineClass(String, ByteBuffer, ProtectionDomain) |
使用 |
DefinePackage(String, String, String, String, String, String, String, URL) |
在此 |
Dispose() |
类加载程序是负责加载类的对象。 (继承自 Object) |
Dispose(Boolean) |
类加载程序是负责加载类的对象。 (继承自 Object) |
Equals(Object) |
指示某个其他对象是否“等于”此对象。 (继承自 Object) |
FindClass(String) |
查找具有指定二进制名称的类。 |
FindLibrary(String) |
返回本机库的绝对路径名称。 |
FindLoadedClass(String) |
如果 Java 虚拟机将此加载程序记录为具有该二进制名称的类的启动加载程序,则返回具有给定二进制名称的类。 |
FindResource(String) |
查找具有给定名称的资源。 |
FindResources(String) |
返回 对象的枚举, |
FindSystemClass(String) |
查找具有指定二进制名称的类,并在必要时加载该类。 |
GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
GetPackage(String) |
返回 |
GetPackages() |
返回此类加载程序及其上级定义的所有 |
GetResource(String) |
查找具有给定名称的资源。 |
GetResourceAsStream(String) |
返回用于读取指定资源的输入流。 |
GetResources(String) |
查找具有给定名称的所有资源。 |
GetSystemResource(String) |
从用于加载类的搜索路径中查找具有指定名称的资源。 |
GetSystemResourceAsStream(String) |
打开以读取,这是用于加载类的搜索路径中指定名称的资源。 |
GetSystemResources(String) |
从用于加载类的搜索路径中查找指定名称的所有资源。 |
JavaFinalize() |
当垃圾回收确定不再引用对象时,由垃圾回收器对对象调用。 (继承自 Object) |
LoadClass(String) |
加载具有指定二进制名称的类。 |
LoadClass(String, Boolean) |
加载具有指定二进制名称的类。 |
LoadClassAsync(String) |
类加载程序是负责加载类的对象。 |
LoadClassAsync(String, Boolean) |
类加载程序是负责加载类的对象。 |
Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
RegisterAsParallelCapable() |
将调用方注册为支持并行调用方。 |
ResolveClass(Class) |
链接指定的类。 |
SetClassAssertionStatus(String, Boolean) |
为此类加载程序中命名的顶级类及其中包含的任何嵌套类设置所需的断言状态。 |
SetDefaultAssertionStatus(Boolean) |
设置此类加载程序的默认断言状态。 |
SetHandle(IntPtr, JniHandleOwnership) |
设置 Handle 属性。 (继承自 Object) |
SetPackageAssertionStatus(String, Boolean) |
设置命名包的包默认断言状态。 |
SetSigners(Class, Object[]) |
设置类的签名者。 |
ToArray<T>() |
类加载程序是负责加载类的对象。 (继承自 Object) |
ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
UnregisterFromRuntime() |
类加载程序是负责加载类的对象。 (继承自 Object) |
Wait() |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<> (继承自 Object) |
Wait(Int64) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
Wait(Int64, Int32) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
显式接口实现
IJavaPeerable.Disposed() |
类加载程序是负责加载类的对象。 (继承自 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
类加载程序是负责加载类的对象。 (继承自 Object) |
IJavaPeerable.Finalized() |
类加载程序是负责加载类的对象。 (继承自 Object) |
IJavaPeerable.JniManagedPeerState |
类加载程序是负责加载类的对象。 (继承自 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
类加载程序是负责加载类的对象。 (继承自 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
类加载程序是负责加载类的对象。 (继承自 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
类加载程序是负责加载类的对象。 (继承自 Object) |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
类加载程序是负责加载类的对象。 |
GetJniTypeName(IJavaPeerable) |
类加载程序是负责加载类的对象。 |