Most visited

Recently visited

Added in API level 1

ClassLoader

public abstract class ClassLoader
extends Object

java.lang.Object
   ↳ java.lang.ClassLoader
Known Direct Subclasses
Known Indirect Subclasses


类加载器是负责加载类的对象。 ClassLoader是一个抽象类。 鉴于类的binary name ,类加载器应该尝试查找或生成构成类的定义的数据。 一种典型的策略是将名称转换为文件名,然后从文件系统中读取该名称的“类文件”。

每个 Class对象都包含 reference到定义它的 ClassLoader

Class数组类的对象不是由类加载器创建的,而是根据Java运行时的需要自动创建的。 getClassLoader()返回的数组类的类加载器与其元素类型的类加载器相同; 如果元素类型是基本类型,那么数组类没有类加载器。

应用程序实现 ClassLoader的子类以扩展Java虚拟机动态加载类的方式。

类加载器通常可以被安全管理器用来指示安全域。

ClassLoader类使用委托模型来搜索类和资源。 每个ClassLoader实例都有一个关联的父类加载器。 当请求查找类或资源时, ClassLoader实例会在尝试查找类或资源本身之前,将对该类或资源的搜索委托给其父类加载器。 虚拟机内置的类加载器称为“引导类加载器”,它本身没有父类,但可以作为ClassLoader实例的父代。

支持的类装载并发类加载器被称为并行能的类加载器,并且需要通过调用在其类初始化的时间来将它们自己注册ClassLoader.registerAsParallelCapable方法。 请注意,默认情况下, ClassLoader类已注册为并行。 但是,如果它们具有并行能力,它的子类仍然需要注册。
在代理模型不严格分层的环境中,类加载器需要具有并行能力,否则类加载会导致死锁,因为加载器锁在类加载过程期间保持loadClass (请参阅方法loadClass )。

通常,Java虚拟机会以平台相关的方式从本地文件系统加载类。 例如,在UNIX系统上,虚拟机从CLASSPATH环境变量定义的目录加载类。

但是,有些类可能不是源自文件; 它们可能来源于其他来源,如网络,或者可能由应用程序构建。 方法defineClass将字节数组转换为类Class的实例。 这个新定义的类的实例可以使用Class.newInstance创建。

由类加载器创建的对象的方法和构造函数可能会引用其他类。 为了确定所引用的类,Java虚拟机调用最初创建类的类加载器的方法loadClass

例如,应用程序可以创建一个网络类加载器来从服务器下载类文件。 示例代码可能如下所示:

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

网络类加载器子类必须定义方法findClassloadClassData以从网络加载类。 一旦它下载了组成该类的字节,它就应该使用方法defineClass来创建一个类实例。 示例实现是:

     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
              . . .
         }
     }
 

Binary names

作为 String参数提供给 String中方法的任何类名 必须是 The Java™ Language Specification定义的二进制名称。

有效的类名称的例子包括:

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

也可以看看:

Summary

Protected constructors

ClassLoader(ClassLoader parent)

使用指定的父类加载器进行委派创建新的类加载器。

ClassLoader()

使用方法 getSystemClassLoader()作为父类加载器返回的 ClassLoader创建新的类加载器。

Public methods

void clearAssertionStatus()

将此类加载器的默认断言状态设置为 false,并放弃与类加载器关联的任何程序包默认值或类断言状态设置。

final ClassLoader getParent()

返回委托的父类加载器。

URL getResource(String name)

查找具有给定名称的资源。

InputStream getResourceAsStream(String name)

返回读取指定资源的输入流。

Enumeration<URL> getResources(String name)

查找具有给定名称的所有资源。

static ClassLoader getSystemClassLoader()

返回委托的系统类加载器。

static URL getSystemResource(String name)

从用于加载类的搜索路径中查找指定名称的资源。

static InputStream getSystemResourceAsStream(String name)

打开阅读,从用于加载类的搜索路径中指定名称的资源。

static Enumeration<URL> getSystemResources(String name)

从用于加载类的搜索路径中查找指定名称的所有资源。

Class<?> loadClass(String name)

使用指定的 binary name加载课程。

void setClassAssertionStatus(String className, boolean enabled)

在此类加载器及其中包含的任何嵌套类中,为指定的顶级类设置所需的断言状态。

void setDefaultAssertionStatus(boolean enabled)

设置此类加载器的默认断言状态。

void setPackageAssertionStatus(String packageName, boolean enabled)

设置命名包的包默认断言状态。

Protected methods

final Class<?> defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain)

将字节数组转换为类 Class的实例,并带有可选的 ProtectionDomain

final Class<?> defineClass(String name, ByteBuffer b, ProtectionDomain protectionDomain)

一个转换 ByteBufferClass类的实例,带有可选 ProtectionDomain。

final Class<?> defineClass(byte[] b, int off, int len)

此方法在API级别1中已被弃用。替换为defineClass(String, byte[], int, int)

final Class<?> defineClass(String name, byte[] b, int off, int len)

将字节数组转换为类 Class的实例。

软件包 definePackage(String name, String specTitle, String specVersion, String specVendor, String implTitle, String implVersion, String implVendor, URL sealBase)

在此 ClassLoader中按名称定义一个包。

Class<?> findClass(String name)

找到具有指定 binary name的课程

String findLibrary(String libname)

返回本机库的绝对路径名称。

final Class<?> findLoadedClass(String name)

如果此加载器已被Java虚拟机记录为具有该 binary name的类的启动加载器,则返回给定 binary name的类。

URL findResource(String name)

查找具有给定名称的资源。

Enumeration<URL> findResources(String name)

返回表示具有给定名称的所有资源的 URL对象的枚举。

final Class<?> findSystemClass(String name)

找到具有指定的 binary name的课程 ,并在必要时加载它。

软件包 getPackage(String name)

返回已由此类加载器或其任何祖先定义的 软件包

Package[] getPackages()

返回由此类加载器及其祖先定义的所有 Packages

Class<?> loadClass(String name, boolean resolve)

使用指定的 binary name加载课程。

static boolean registerAsParallelCapable()

将调用者注册为并行能力。

final void resolveClass(Class<?> c)

链接指定的类。

final void setSigners(Class<?> c, Object[] signers)

设置类的签名者。

Inherited methods

From class java.lang.Object

Protected constructors

ClassLoader

Added in API level 1
ClassLoader (ClassLoader parent)

使用指定的父类加载器进行委派创建新的类加载器。

如果有安全管理器,则调用其checkCreateClassLoader方法。 这可能会导致安全异常。

Parameters
parent ClassLoader: The parent class loader
Throws
SecurityException If a security manager exists and its checkCreateClassLoader method doesn't allow creation of a new class loader.

ClassLoader

Added in API level 1
ClassLoader ()

使用方法 getSystemClassLoader()作为父类加载器返回的 ClassLoader创建一个新的类加载器。

如果有安全管理器,则调用其checkCreateClassLoader方法。 这可能会导致安全异常。

Throws
SecurityException If a security manager exists and its checkCreateClassLoader method doesn't allow creation of a new class loader.

Public methods

clearAssertionStatus

Added in API level 1
void clearAssertionStatus ()

将此类加载器的默认断言状态设置为false,并放弃与类加载器关联的所有程序包缺省值或类断言状态设置。 提供此方法的目的是使类加载器可以忽略任何命令行或持久断言状态设置,并且“以干净的版本开始”。

getParent

Added in API level 1
ClassLoader getParent ()

返回委托的父类加载器。 某些实现可能使用null来表示引导类加载器。 如果此类加载器的父类是引导类加载器,则此方法将在此类实现中返回null

如果安全管理器存在,并且调用者的类加载器不是此类加载器的祖先,则此方法调用安全管理器的checkPermission方法,并具有RuntimePermission("getClassLoader")权限,以验证是否允许访问父类加载器。 如果不是,则会抛出SecurityException

Returns
ClassLoader The parent ClassLoader
Throws
SecurityException If a security manager exists and its checkPermission method doesn't allow access to this class loader's parent class loader.

getResource

Added in API level 1
URL getResource (String name)

查找具有给定名称的资源。 资源是一些数据(图像,音频,文本等),可以通过类代码以独立于代码位置的方式访问。

资源的名称是标识资源的' / ' 分隔的路径名称。

这个方法将首先搜索父类加载器的资源; 如果父项是null ,则将搜索内置到虚拟机的类加载器的路径。 如果失败,该方法将调用findResource(String)来查找资源。

Parameters
name String: The resource name
Returns
URL A URL object for reading the resource, or null if the resource could not be found or the invoker doesn't have adequate privileges to get the resource.

getResourceAsStream

Added in API level 1
InputStream getResourceAsStream (String name)

返回读取指定资源的输入流。

搜索顺序在 getResource(String)的文档中 getResource(String)

Parameters
name String: The resource name
Returns
InputStream An input stream for reading the resource, or null if the resource could not be found

getResources

Added in API level 1
Enumeration<URL> getResources (String name)

查找具有给定名称的所有资源。 资源是一些数据(图像,音频,文本等),可以通过类代码以独立于代码位置的方式访问。

资源的名称是一个 标识资源的 /分隔的路径名。

搜索顺序在 getResource(String)的文档中有描述。

Parameters
name String: The resource name
Returns
Enumeration<URL> An enumeration of URL objects for the resource. If no resources could be found, the enumeration will be empty. Resources that the class loader doesn't have access to will not be in the enumeration.
Throws
IOException If I/O errors occur

也可以看看:

getSystemClassLoader

Added in API level 1
ClassLoader getSystemClassLoader ()

返回委托的系统类加载器。 这是新的ClassLoader实例的默认委派父 ,通常是用于启动应用程序的类加载器。

该方法在运行时的启动序列中首先被调用,此时它会创建系统类加载器并将其设置为调用 Thread的上下文类加载器。

默认的系统类加载器是该类的实现相关实例。

如果在首次调用此方法时定义了系统属性“ java.system.class.loader ”,那么该属性的值将被视为将作为系统类加载器返回的类的名称。 该类使用默认系统类加载器加载,并且必须定义一个公共构造函数,该构造函数接受用作委派父项的类型为ClassLoader的单个参数。 然后使用此构造函数创建一个实例,并使用默认的系统类加载器作为参数。 生成的类加载器被定义为系统类加载器。

如果存在安全管理器,并且调用者的类加载器不是null ,并且调用者的类加载器与系统类加载器不相同或始祖,则此方法调用安全管理器的checkPermission方法,并具有RuntimePermission("getClassLoader")权限以验证访问权限到系统类加载器。 如果不是,则会抛出SecurityException

Returns
ClassLoader The system ClassLoader for delegation, or null if none
Throws
SecurityException If a security manager exists and its checkPermission method doesn't allow access to the system class loader.
IllegalStateException If invoked recursively during the construction of the class loader specified by the "java.system.class.loader" property.
Error If the system property "java.system.class.loader" is defined but the named class could not be loaded, the provider class does not define the required constructor, or an exception is thrown by that constructor when it is invoked. The underlying cause of the error can be retrieved via the getCause() method.

getSystemResource

Added in API level 1
URL getSystemResource (String name)

从用于加载类的搜索路径中查找指定名称的资源。 此方法通过系统类加载器查找资源(请参阅getSystemClassLoader() )。

Parameters
name String: The resource name
Returns
URL A URL object for reading the resource, or null if the resource could not be found

getSystemResourceAsStream

Added in API level 1
InputStream getSystemResourceAsStream (String name)

打开阅读,从用于加载类的搜索路径中指定名称的资源。 此方法通过系统类加载器查找资源(请参阅getSystemClassLoader() )。

Parameters
name String: The resource name
Returns
InputStream An input stream for reading the resource, or null if the resource could not be found

getSystemResources

Added in API level 1
Enumeration<URL> getSystemResources (String name)

从用于加载类的搜索路径中查找指定名称的所有资源。 这样找到的资源将返回为EnumerationURL对象。

搜索顺序在 getSystemResource(String)的文档中 getSystemResource(String)

Parameters
name String: The resource name
Returns
Enumeration<URL> An enumeration of resource URL objects
Throws
IOException If I/O errors occur

loadClass

Added in API level 1
Class<?> loadClass (String name)

使用指定的binary name加载课程。 该方法以与loadClass(String, boolean)方法相同的方式搜索类。 它由Java虚拟机调用以解析类引用。 调用此方法相当于调用loadClass(name, false)

Parameters
name String: The binary name of the class
Returns
Class<?> The resulting Class object
Throws
ClassNotFoundException If the class was not found

setClassAssertionStatus

Added in API level 1
void setClassAssertionStatus (String className, 
                boolean enabled)

在此类加载器及其中包含的任何嵌套类中,为指定的顶级类设置所需的断言状态。 此设置优先于类加载器的默认断言状态以及任何适用的每个包默认值。 如果已命名的类已被初始化,则此方法不起作用。 (一旦一个类被初始化,它的断言状态就不会改变。)

如果指定的类不是顶级类,则此调用将不会影响任何类的实际断言状态。

Parameters
className String: The fully qualified class name of the top-level class whose assertion status is to be set.
enabled boolean: true if the named class is to have assertions enabled when (and if) it is initialized, false if the class is to have assertions disabled.

setDefaultAssertionStatus

Added in API level 1
void setDefaultAssertionStatus (boolean enabled)

设置此类加载器的默认断言状态。 此设置确定此类加载器加载并在将来初始化的类是否默认启用或禁用断言。 通过调用setPackageAssertionStatus(String, boolean)setClassAssertionStatus(String, boolean)可以基于每个包或每个类来覆盖此设置。

Parameters
enabled boolean: true if classes loaded by this class loader will henceforth have assertions enabled by default, false if they will have assertions disabled by default.

setPackageAssertionStatus

Added in API level 1
void setPackageAssertionStatus (String packageName, 
                boolean enabled)

设置命名包的包默认断言状态。 程序包缺省断言状态决定了将来初始化的属于命名程序包或其任何“子程序包”的类的断言状态。

名为p的软件包的子软件包是名称以“ p. ”开头的任何软件包。 例如,javax.swing.textjavax.swing一个子包,并且两个java.util java.lang.reflect和是java子包。

如果多个程序包默认值适用于给定的类,则与最具体程序包有关的程序包默认优先于其他程序包。 例如,如果javax.langjavax.lang.reflect都具有与其关联的软件包默认值,则后者的软件包默认值将应用于javax.lang.reflect中的类。

包默认优先于类加载器的默认断言状态,并且可以通过调用 setClassAssertionStatus(String, boolean)以每个类为基础进行 setClassAssertionStatus(String, boolean)

Parameters
packageName String: The name of the package whose package default assertion status is to be set. A null value indicates the unnamed package that is "current" (see section 7.4.2 of The Java™ Language Specification.)
enabled boolean: true if classes loaded by this classloader and belonging to the named package or any of its subpackages will have assertions enabled by default, false if they will have assertions disabled by default.

Protected methods

defineClass

Added in API level 1
Class<?> defineClass (String name, 
                byte[] b, 
                int off, 
                int len, 
                ProtectionDomain protectionDomain)

使用可选的ProtectionDomain将字节数组转换为类Class的实例。 如果域名是null ,那么默认域名将被分配给类别defineClass(String, byte[], int, int)的文档中指定的defineClass(String, byte[], int, int) 在课程可以使用之前,必须解决。

包中定义的第一个类确定了该包中定义的所有后续类必须包含的确切证书集。 从班级的CodeSource内的CodeSource获得一组班级的证书。 添加到该软件包的任何类都必须包含相同的证书集合, 否则将抛出SecurityException 请注意,如果namenull ,则不执行此项检查。 您应该始终传递您定义的类的binary name以及字节。 这可以确保您定义的课程确实是您认为的课程。

指定的 name不能以“ java. ”开头,因为“ java.*包中的所有类只能由引导类加载器定义,如果 name不是 null ,它必须等于字节数组指定的类的 binary nameb “,否则会抛出 NoClassDefFoundError

Parameters
name String: The expected binary name of the class, or null if not known
b byte: The bytes that make up the class data. The bytes in positions off through off+len-1 should have the format of a valid class file as defined by The Java™ Virtual Machine Specification.
off int: The start offset in b of the class data
len int: The length of the class data
protectionDomain ProtectionDomain: The ProtectionDomain of the class
Returns
Class<?> The Class object created from the data, and optional ProtectionDomain.
Throws
ClassFormatError If the data did not contain a valid class
NoClassDefFoundError If name is not equal to the binary name of the class specified by b
IndexOutOfBoundsException If either off or len is negative, or if off+len is greater than b.length.
SecurityException If an attempt is made to add this class to a package that contains classes that were signed by a different set of certificates than this class, or if name begins with "java.".

defineClass

Added in API level 1
Class<?> defineClass (String name, 
                ByteBuffer b, 
                ProtectionDomain protectionDomain)

一个转换ByteBufferClass类的实例,带有可选ProtectionDomain。 如果域名为null ,则默认域将按照defineClass(String, byte[], int, int)文档中的规定分配给该类别。 在课程可以使用之前,必须解决。

有关确定包的证书集的包中定义的第一个类的规则以及对类名的限制与 defineClass(String, byte[], int, int, ProtectionDomain)文档中指定的相同。

调用形式为 cl .defineClass(的方法 名称 , bBuffer , pd )产生与语句完全相同的结果

...
byte[] temp = new byte[
bBuffer .remaining()];
bBuffer .get(temp);
return
cl.defineClass ( name , temp, 0, temp.length, pd );

Parameters
name String: The expected binary name. of the class, or null if not known
b ByteBuffer: The bytes that make up the class data. The bytes from positions b.position() through b.position() + b.limit() -1 should have the format of a valid class file as defined by The Java™ Virtual Machine Specification.
protectionDomain ProtectionDomain: The ProtectionDomain of the class, or null.
Returns
Class<?> The Class object created from the data, and optional ProtectionDomain.
Throws
ClassFormatError If the data did not contain a valid class.
NoClassDefFoundError If name is not equal to the binary name of the class specified by b
SecurityException If an attempt is made to add this class to a package that contains classes that were signed by a different set of certificates than this class, or if name begins with "java.".

也可以看看:

defineClass

Added in API level 1
Class<?> defineClass (byte[] b, 
                int off, 
                int len)

此方法在API级别1中已弃用。
defineClass(String, byte[], int, int)

将字节数组转换为类Class的实例。 在使用Class之前,必须先解决。 此方法已被弃用,以支持以binary name作为其第一个参数的版本,并且更安全。

Parameters
b byte: The bytes that make up the class data. The bytes in positions off through off+len-1 should have the format of a valid class file as defined by The Java™ Virtual Machine Specification.
off int: The start offset in b of the class data
len int: The length of the class data
Returns
Class<?> The Class object that was created from the specified class data
Throws
ClassFormatError If the data did not contain a valid class
IndexOutOfBoundsException If either off or len is negative, or if off+len is greater than b.length.
SecurityException If an attempt is made to add this class to a package that contains classes that were signed by a different set of certificates than this class, or if an attempt is made to define a class in a package with a fully-qualified name that starts with "java.".

也可以看看:

defineClass

Added in API level 1
Class<?> defineClass (String name, 
                byte[] b, 
                int off, 
                int len)

将字节数组转换为类Class的实例。 在使用Class之前,必须先解决。

该方法为新定义的类分配默认的ProtectionDomain Policy.getPolicy().getPermissions(new CodeSource(null, null))被调用时, ProtectionDomain被有效地授予返回的同一组权限。 默认域是在第一次调用defineClass创建的,并在后续调用中重新使用。

要为该类指定特定的 ProtectionDomain ,请使用 defineClass方法,该方法将 ProtectionDomain作为其参数之一。

Parameters
name String: The expected binary name of the class, or null if not known
b byte: The bytes that make up the class data. The bytes in positions off through off+len-1 should have the format of a valid class file as defined by The Java™ Virtual Machine Specification.
off int: The start offset in b of the class data
len int: The length of the class data
Returns
Class<?> The Class object that was created from the specified class data.
Throws
ClassFormatError If the data did not contain a valid class
IndexOutOfBoundsException If either off or len is negative, or if off+len is greater than b.length.
SecurityException If an attempt is made to add this class to a package that contains classes that were signed by a different set of certificates than this class (which is unsigned), or if name begins with "java.".

也可以看看:

definePackage

Added in API level 1
软件包 definePackage (String name, 
                String specTitle, 
                String specVersion, 
                String specVendor, 
                String implTitle, 
                String implVersion, 
                String implVendor, 
                URL sealBase)

在此ClassLoader中按名称定义一个包。 这允许类加载器为他们的类定义包。 包必须在类定义之前创建,并且包名在类加载器中必须是唯一的,并且一旦创建就不能重新定义或更改。

Parameters
name String: The package name
specTitle String: The specification title
specVersion String: The specification version
specVendor String: The specification vendor
implTitle String: The implementation title
implVersion String: The implementation version
implVendor String: The implementation vendor
sealBase URL: If not null, then this package is sealed with respect to the given code source URL object. Otherwise, the package is not sealed.
Returns
软件包 The newly defined 软件包 object
Throws
IllegalArgumentException If package name duplicates an existing package either in this class loader or one of its ancestors

findClass

Added in API level 1
Class<?> findClass (String name)

找到具有指定binary name的课程 这个方法应该由加载类的代理模型loadClass的类加载器实现覆盖,并且在检查所请求的类的父类加载器后, loadClass方法调用。 默认实现抛出ClassNotFoundException

Parameters
name String: The binary name of the class
Returns
Class<?> The resulting Class object
Throws
ClassNotFoundException If the class could not be found

findLibrary

Added in API level 1
String findLibrary (String libname)

返回本机库的绝对路径名称。 VM调用此方法来查找属于使用此类加载器加载的类的本机库。 如果此方法返回null ,则VM将按照指定为“ java.library.path ”属性的路径搜索库。

Parameters
libname String: The library name
Returns
String The absolute path of the native library

也可以看看:

findLoadedClass

Added in API level 1
Class<?> findLoadedClass (String name)

如果此加载器已被Java虚拟机记录为具有该binary name的类的启动加载器,则返回具有给定binary name的类。 否则返回null

Parameters
name String: The binary name of the class
Returns
Class<?> The Class object, or null if the class has not been loaded

findResource

Added in API level 1
URL findResource (String name)

查找具有给定名称的资源。 类加载器实现应该重写此方法以指定在哪里查找资源。

Parameters
name String: The resource name
Returns
URL A URL object for reading the resource, or null if the resource could not be found

findResources

Added in API level 1
Enumeration<URL> findResources (String name)

返回表示具有给定名称的所有资源的URL对象的枚举。 类加载器实现应该重写此方法以指定从哪里加载资源。

Parameters
name String: The resource name
Returns
Enumeration<URL> An enumeration of URL objects for the resources
Throws
IOException If I/O errors occur

findSystemClass

Added in API level 1
Class<?> findSystemClass (String name)

找到具有指定的 binary name的课程 ,并根据需要加载它。

此方法通过系统类加载器加载该类(请参阅getSystemClassLoader() )。 返回的Class对象可能有多个与其关联的ClassLoader ClassLoader的子类通常不需要调用这个方法,因为大多数类加载器只需要覆盖findClass(String)

Parameters
name String: The binary name of the class
Returns
Class<?> The Class object for the specified name
Throws
ClassNotFoundException If the class could not be found

也可以看看:

getPackage

Added in API level 1
软件包 getPackage (String name)

返回已由此类加载器或其任何祖先定义的 软件包

Parameters
name String: The package name
Returns
软件包 The 软件包 corresponding to the given name, or null if not found

getPackages

Added in API level 1
Package[] getPackages ()

返回由此类加载器及其祖先定义的所有 Packages

Returns
Package[] The array of 软件包 objects defined by this ClassLoader

loadClass

Added in API level 1
Class<?> loadClass (String name, 
                boolean resolve)

使用指定的binary name加载课程。 此方法的默认实现按以下顺序搜索类:

  1. 调用 findLoadedClass(String)来检查该类是否已被加载。

  2. 在父类加载器上调用loadClass方法。 如果父项是null ,则会使用内置于虚拟机的类加载器。

  3. 调用 findClass(String)方法来查找类。

如果使用上述步骤找到该类,并且 resolve标志为true,则此方法将调用所产生的 Class对象上的 resolveClass(Class)方法。

鼓励 ClassLoader的子类覆盖 findClass(String) ,而不是此方法。

Parameters
name String: The binary name of the class
resolve boolean: If true then resolve the class
Returns
Class<?> The resulting Class object
Throws
ClassNotFoundException If the class could not be found

registerAsParallelCapable

Added in API level 24
boolean registerAsParallelCapable ()

将调用者注册为并行能力。

The registration succeeds if and only if all of the following conditions are met:
1. no instance of the caller has been created

2. all of the super classes (except class Object) of the caller are registered as parallel capable

Note that once a class loader is registered as parallel capable, there is no way to change it back.

Returns
boolean true if the caller is successfully registered as parallel capable and false if otherwise.

resolveClass

Added in API level 1
void resolveClass (Class<?> c)

链接指定的类。 这个(具有误导性的命名)方法可以被类加载器用来链接一个类。 如果类c已经链接,则此方法仅返回。 否则,该类按照The Java™ Language Specification的“执行”章节中的描述进行链接

Parameters
c Class: The class to link
Throws
NullPointerException If c is null.

也可以看看:

setSigners

Added in API level 1
void setSigners (Class<?> c, 
                Object[] signers)

设置类的签名者。 这应该在定义一个类之后调用。

Parameters
c Class: The Class object
signers Object: The signers for the class

Hooray!