📄 classloader.html
字号:
<DT><B>返回:</B><DD>从指定类数据中创建的 <tt>Class</tt> 对象。<DT><B>抛出:</B><DD><CODE><A HREF="ClassFormatError.html" title="java.lang 中的类">ClassFormatError</A></CODE> - 如果数据不包含有效类<DD><CODE><A HREF="IndexOutOfBoundsException.html" title="java.lang 中的类">IndexOutOfBoundsException</A></CODE> - 如果 <tt>off</tt> 或 <tt>len</tt> 为负,或者如果 <tt>off+len</tt> 大于 <tt>b.length</tt>。<DD><CODE><A HREF="SecurityException.html" title="java.lang 中的类">SecurityException</A></CODE> - 如果试图将此类添加到包含由不同证书集签名的类(而不是此类,此类未签名)的包中,或者如果 <tt>name</tt> 以 "<tt>java.</tt>" 开头。<DT><B>从以下版本开始:</B></DT> <DD>1.1</DD><DT><B>另请参见:</B><DD><A HREF="ClassLoader.html#loadClass(java.lang.String, boolean)"><CODE>loadClass(String, boolean)</CODE></A>, <A HREF="ClassLoader.html#resolveClass(java.lang.Class)"><CODE>resolveClass(Class)</CODE></A>, <CODE>CodeSource</CODE>, <CODE>SecureClassLoader</CODE></DL></DD></DL><HR><A NAME="defineClass(java.lang.String, byte[], int, int, java.security.ProtectionDomain)"><!-- --></A><H3>defineClass</H3><PRE>protected final <A HREF="Class.html" title="java.lang 中的类">Class</A><?> <B>defineClass</B>(<A HREF="String.html" title="java.lang 中的类">String</A> name, byte[] b, int off, int len, java.security.ProtectionDomain protectionDomain) throws <A HREF="ClassFormatError.html" title="java.lang 中的类">ClassFormatError</A></PRE><DL><DD>使用可选的 <tt>ProtectionDomain</tt> 将一个字节数组转换为 <tt>Class</tt> 类的实例。如果该域为 <tt>null</tt>,则将默认域分配给 <A HREF="ClassLoader.html#defineClass(java.lang.String, byte[], int, int)"><CODE>defineClass(String, byte[], int, int)</CODE></A> 的文档中指定的类。这个类必须分析后才能使用。<p> 包中定义的第一个类确定在该包中定义的所有后续类必须包含的证书的确切集合。从该类的 <tt>ProtectionDomain</tt> 中的 <CODE><tt>CodeSource</tt></CODE> 可以获得类的证书集合。添加到该包中的任何类都必须包含相同的证书集合,否则抛出 <tt>SecurityException</tt> 异常。注意,如果 <tt>name</tt> 为 <tt>null</tt>,则不执行该检查。应该始终传入要定义的类的<a href="#name">二进制名称</a>以及字节。这可确保定义该类的正确性。<p> 指定的 <tt>name</tt> 不能以 "<tt>java.</tt>" 开头,因为 "<tt>java.*</tt>" 包中的所有类都只能由引导类加载器定义。如果 <tt>name</tt> 不是 <tt>null</tt>,则它必定等于由字节数组 "<tt>b</tt>" 指定的类的<a href="#name">二进制名称</a>,否则将抛出 <tt>NoClassDefFoundError</tt>。 </p><P><DD><DL><DT><B>参数:</B><DD><CODE>name</CODE> - 所需类的<a href="#name">二进制名称</a>,如果不知道此名称,则该参数为 <tt>null</tt><DD><CODE>b</CODE> - 组成类数据的字节。从 <tt>off</tt> 到 <tt>off+len-1</tt> 的字节应该具有由《<a href="../../../../../../../../java.sun.com/docs/books/vmspec/default.htm">Java Virtual Machine Specification</a>》定义的有效类文件的格式。<DD><CODE>off</CODE> - 类数据的 <tt>b</tt> 中的起始偏移量<DD><CODE>len</CODE> - 类数据的长度<DD><CODE>protectionDomain</CODE> - 类的 ProtectionDomain<DT><B>返回:</B><DD>从数据中创建的 <tt>Class</tt> 对象和可选的 <tt>ProtectionDomain</tt>。<DT><B>抛出:</B><DD><CODE><A HREF="ClassFormatError.html" title="java.lang 中的类">ClassFormatError</A></CODE> - 如果数据不包含有效的类<DD><CODE><A HREF="NoClassDefFoundError.html" title="java.lang 中的类">NoClassDefFoundError</A></CODE> - 如果 <tt>name</tt> 不等于 <tt>b</tt> 指定的类的<a href="#name">二进制名称</a>。<DD><CODE><A HREF="IndexOutOfBoundsException.html" title="java.lang 中的类">IndexOutOfBoundsException</A></CODE> - 如果 <tt>off</tt> 或者 <tt>len</tt> 为负,或者如果 <tt>off+len</tt> 大于 <tt>b.length</tt>。<DD><CODE><A HREF="SecurityException.html" title="java.lang 中的类">SecurityException</A></CODE> - 如果试图将此类添加到某个包中,而这个包中包含由不同证书集合(而不是该类)签名的类,或者如果 <tt>name</tt> 以 "<tt>java.</tt>" 开头。</DL></DD></DL><HR><A NAME="defineClass(java.lang.String, java.nio.ByteBuffer, java.security.ProtectionDomain)"><!-- --></A><H3>defineClass</H3><PRE>protected final <A HREF="Class.html" title="java.lang 中的类">Class</A><?> <B>defineClass</B>(<A HREF="String.html" title="java.lang 中的类">String</A> name, java.nio.ByteBuffer b, java.security.ProtectionDomain protectionDomain) throws <A HREF="ClassFormatError.html" title="java.lang 中的类">ClassFormatError</A></PRE><DL><DD>使用可选的 <tt>ProtectionDomain</tt> 将 <CODE><tt>ByteBuffer</tt></CODE> 转换为 <tt>Class</tt> 类的实例。如果该域为 <tt>null</tt>,则将默认域分配给 <A HREF="ClassLoader.html#defineClass(java.lang.String, byte[], int, int)"><CODE>defineClass(String, byte[], int, int)</CODE></A> 的文档中指定的类。这个类必须分析后才能使用。<p>有关包中定义的第一个类(它确定了包的证书集合)的规则,以及对类名称的限制,都与 <A HREF="ClassLoader.html#defineClass(java.lang.String, byte[], int, int, java.security.ProtectionDomain)"><CODE>defineClass(String, byte[], int, int, ProtectionDomain)</CODE></A> 的文档中指定的相同。<p> 调用形式为 <i>cl</i><tt>.defineClass(</tt><i>name</i><tt>,</tt> <i>bBuffer</i><tt>,</tt> <i>pd</i><tt>)</tt> 的此方法所产生的结果与以下语句产生的结果相同 <blockquote><tt> ...<br> byte[] temp = new byte[</tt><i>bBuffer</i><tt>.<CODE>remaining</CODE>()];<br> </tt><i>bBuffer</i><tt>.<CODE>get</CODE>(temp);<br> return <A HREF="ClassLoader.html#defineClass(java.lang.String, byte[], int, int, java.security.ProtectionDomain)"><CODE></tt><i>cl</i><tt>.defineClass</CODE></A>(</tt><i>name</i><tt>, temp, 0, temp.length, </tt><i>pd</i><tt>);<br> </tt></blockquote><P><DD><DL><DT><B>参数:</B><DD><CODE>name</CODE> - 所需要的类的<a href="#name">二进制名称</a>,如果不知道此名称,则该参数为 <tt>null</tt><DD><CODE>b</CODE> - 组成类数据的字节。从 <tt>b.position</tt> 到 <tt>b.position() + b.limit() -1 </tt> 的字节应该具有由《<a href="../../../../../../../../java.sun.com/docs/books/vmspec/default.htm">Java Virtual Machine Specification</a>》定义的有效类文件的格式。<DD><CODE>protectionDomain</CODE> - 类的 ProtectionDomain,或为 <tt>null</tt>。<DT><B>返回:</B><DD>从数据中创建的 <tt>Class</tt> 对象和可选的 <tt>ProtectionDomain</tt>。<DT><B>抛出:</B><DD><CODE><A HREF="ClassFormatError.html" title="java.lang 中的类">ClassFormatError</A></CODE> - 如果数据不包含有效的类。<DD><CODE><A HREF="NoClassDefFoundError.html" title="java.lang 中的类">NoClassDefFoundError</A></CODE> - 如果 <tt>name</tt> 不等于 <tt>b</tt> 指定的类的<a href="#name">二进制名称</a>。<DD><CODE><A HREF="SecurityException.html" title="java.lang 中的类">SecurityException</A></CODE> - 如果试图将此类添加到某个包中,而这个包中包含由不同证书集合(而不是该类)签名的类,或者如果 <tt>name</tt> 以 "<tt>java.</tt>" 开头。<DT><B>从以下版本开始:</B></DT> <DD>1.5</DD><DT><B>另请参见:</B><DD><A HREF="ClassLoader.html#defineClass(java.lang.String, byte[], int, int, java.security.ProtectionDomain)"><CODE>defineClass(String, byte[], int, int, ProtectionDomain)</CODE></A></DL></DD></DL><HR><A NAME="resolveClass(java.lang.Class)"><!-- --></A><H3>resolveClass</H3><PRE>protected final void <B>resolveClass</B>(<A HREF="Class.html" title="java.lang 中的类">Class</A><?> c)</PRE><DL><DD>链接指定的类。类加载器可以使用此方法(其名称容易使人误解)来链接类。如果已经链接类 <tt>c</tt>,则仅返回此方法。否则,该类就按《<a href="../../../../../../../../java.sun.com/docs/books/jls/default.htm">Java Language Specification</a>》中 "Execution" 一章所描述的进行链接。 </p><P><DD><DL><DT><B>参数:</B><DD><CODE>c</CODE> - 要链接的类<DT><B>抛出:</B><DD><CODE><A HREF="NullPointerException.html" title="java.lang 中的类">NullPointerException</A></CODE> - 如果 <tt>c</tt> 为 <tt>null</tt>。<DT><B>另请参见:</B><DD><A HREF="ClassLoader.html#defineClass(java.lang.String, byte[], int, int)"><CODE>defineClass(String, byte[], int, int)</CODE></A></DL></DD></DL><HR><A NAME="findSystemClass(java.lang.String)"><!-- --></A><H3>findSystemClass</H3><PRE>protected final <A HREF="Class.html" title="java.lang 中的类">Class</A><?> <B>findSystemClass</B>(<A HREF="String.html" title="java.lang 中的类">String</A> name) throws <A HREF="ClassNotFoundException.html" title="java.lang 中的类">ClassNotFoundException</A></PRE><DL><DD>查找具有指定的<a href="#name">二进制名称</a>的类,必要时加载它。<p> 此方法通过系统类加载器(参见 <A HREF="ClassLoader.html#getSystemClassLoader()"><CODE>getSystemClassLoader()</CODE></A>)来加载该类。返回的 <tt>Class</tt> 对象具有多个与之相关联的 <tt>ClassLoader</tt>。<tt>ClassLoader</tt> 的子类通常不必调用此方法,因为大多数类加载器只需重写 <A HREF="ClassLoader.html#findClass(java.lang.String)"><CODE>findClass(String)</CODE></A> 即可。</p><P><DD><DL><DT><B>参数:</B><DD><CODE>name</CODE> - 类的<a href="#name">二进制名称</a><DT><B>返回:</B><DD>指定 <tt>name</tt> 的 <tt>Class</tt> 对象<DT><B>抛出:</B><DD><CODE><A HREF="ClassNotFoundException.html" title="java.lang 中的类">ClassNotFoundException</A></CODE> - 如果找不到类<DT><B>另请参见:</B><DD><A HREF="ClassLoader.html#ClassLoader(java.lang.ClassLoader)"><CODE>ClassLoader(ClassLoader)</CODE></A>, <A HREF="ClassLoader.html#getParent()"><CODE>getParent()</CODE></A></DL></DD></DL><HR><A NAME="findLoadedClass(java.lang.String)"><!-- --></A><H3>findLoadedClass</H3><PRE>protected final <A HREF="Class.html" title="java.lang 中的类">Class</A><?> <B>findLoadedClass</B>(<A HREF="String.html" title="java.lang 中的类">String</A> name)</PRE><DL><DD>如果 Java 虚拟机已将此加载器记录为具有给定<a href="#name">二进制名称</a>的某个类的启动加载器,则返回该<a href="#name">二进制名称</a>的类。否则,返回 <tt>null</tt>。</p><P><DD><DL><DT><B>参数:</B><DD><CODE>name</CODE> - 类的<a href="#name">二进制名称</a><DT><B>返回:</B><DD><tt>Class</tt> 对象,如果类没有被加载,则返回 <tt>null</tt><DT><B>从以下版本开始:</B></DT> <DD>1.1</DD></DL></DD></DL><HR><A NAME="setSigners(java.lang.Class, java.lang.Object[])"><!-- --></A><H3>setSigners</H3><PRE>protected final void <B>setSigners</B>(<A HREF="Class.html" title="java.lang 中的类">Class</A><?> c, <A HREF="Object.html" title="java.lang 中的类">Object</A>[] signers)</PRE><DL><DD>设置类的签署者。应该在定义类后调用此方法。</p><P><DD><DL><DT><B>参数:</B><DD><CODE>c</CODE> - <tt>Class</tt> 对象<DD><CODE>signers</CODE> - 类的签署者<DT><B>从以下版本开始:</B></DT> <DD>1.1</DD></DL></DD></DL><HR><A NAME="getResource(java.lang.String)"><!-- --></A><H3>getResource</H3><PRE>public java.net.URL <B>getResource</B>(<A HREF="String.html" title="java.lang 中的类">String</A> name)</PRE><DL><DD>查找具有给定名称的资源。资源是可以通过类代码以与代码位置无关的方式访问的一些数据(图像、声音、文本等)。<p> 资源名称是以 '<tt>/</tt>' 分隔的标识资源的路径名称。<p> 此方法首先搜索资源的父类加载器;如果父类加载器为 <tt>null</tt>,则搜索的路径就是虚拟机的内置类加载器的路径。如果搜索失败,则此方法将调用 <A HREF="ClassLoader.html#findResource(java.lang.String)"><CODE>findResource(String)</CODE></A> 来查找资源。</p><P><DD><DL><DT><B>参数:</B><DD><CODE>name</CODE> - 资源名称<DT><B>返回:</B><DD>读取资源的 <tt>URL</tt> 对象,或者如果找不到该资源,或者调用者没有足够的权限获取该资源,则返回 <tt>null</tt>。<DT><B>从以下版本开始:</B></DT> <DD>1.1</DD></DL></DD></DL><HR><A NAME="getResources(java.lang.String)"><!-- --></A><H3>getResources</H3><PRE>public <A HREF="../util/Enumeration.html" title="java.util 中的接口">Enumeration</A><java.net.URL> <B>getResources</B>(<A HREF="String.html" title="java.lang 中的类">String</A> name) throws java.io.IOException</PRE><DL><DD>查找所有给定名称的资源。资源是可以通过类代码以与代码位置无关的方式访问的某些数据(图像、声音、文本等)。<p>资源名称是以 '<tt>/</tt>' 分隔的标识资源的路径名称。<p><A HREF="ClassLoader.html#getResource(java.lang.String)"><CODE>getResource(String)</CODE></A> 的文档中描述了搜索顺序。</p><P><DD><DL><DT><B>参数:</B><DD><CODE>name</CODE> - 资源名称<DT><B>返回:</B><DD>资源的 <CODE><tt>URL</tt></CODE> 对象的枚举。如果找不到资源,则该枚举将为空。类加载器无权访问的资源不在此枚举中。<DT><B>抛出:</B><DD><CODE>java.io.IOException</CODE> - 如果发生 I/O 错误<DT><B>从以下版本开始:</B></DT> <DD>1.2</DD><DT><B>另请参见:</B><DD><A HREF="ClassLoader.html#findResources(java.lang.String)"><CODE>findResources(String)</CODE></A></DL></DD></DL><HR><A NAME="findResource(java.lang.String)"><!-- --></A><H3>findResource</H3><PRE>protected java.net.URL <B>findResource</B>(<A HREF="String.html" title="java.lang 中的类">String</A> name)</PRE><DL><DD>查找具有给定名称的资源。类加载器实现应该重写此方法,以指定从何处查找资源。</p><P><DD><DL><DT><B>参数:</B><DD><CODE>name</CODE> - 资源名称<DT><B>返回:</B><DD>用于读取资源的 <tt>URL</tt> 对象,或者如果无法找到资源,则返回 <tt>null</tt><DT><B>从以下版本开始:</B></DT> <DD>1.2</DD></DL></DD></DL><HR><A NAME="findResources(java.lang.String)"><!-- --></A><H3>findResources</H3><PRE>protected <A HREF="../util/Enumeration.html" title="java.util 中的接口">Enumeration</A><java.net.URL> <B>findResources</B>(<A HREF="String.html" title="java.lang 中的类">String</A> name) throws java.io.IOException</PRE><DL><DD>返回表示所有具有给定名称的资源的 <CODE><tt>URL</tt></CODE> 对象的枚举。类加载器实现应该重写此方法,以指定从何处加载资源。</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -