以下是 JDK 8 中 ClassLoader
类的部分源代码:
public abstract class ClassLoader {
protected ClassLoader() {
// Initialize this class loader. Initialization is invoked
// implicitly by the first invocation of
// findClass(java.lang.String), defineClass(java.lang.String, byte[], int, int),
// or loadClass(java.lang.String).
}
protected Class<?> defineClass(String name, byte[] b, int off, int len)
throws ClassFormatError
{
return defineClass(name, b, off, len, null);
}
protected Class<?> defineClass(String name, byte[] b, int off, int len,
ProtectionDomain protectionDomain)
throws ClassFormatError
{
throw new UnsupportedOperationException("Method not supported");
}
protected final Class<?> defineClass(String name, ByteBuffer b,
ProtectionDomain protectionDomain)
{
throw new UnsupportedOperationException("Method not supported");
}
protected final Class<?> defineClass(String name, ByteBuffer b)
{
throw new UnsupportedOperationException("Method not supported");
}
protected final void resolveClass(Class<?> c) {
resolveClass0(c);
}
private native void resolveClass0(Class<?> c);
protected final Class<?> findLoadedClass(String name) {
return findLoadedClass0(name);
}
private native final Class<?> findLoadedClass0(String name);
protected final Class<?> findBootstrapClassOrNull(String name) {
return findBootstrapClassOrNull0(name);
}
private native final Class<?> findBootstrapClassOrNull0(String name);
protected final Class<?> findClass(String name) throws ClassNotFoundException {
throw new ClassNotFoundException(name);
}
protected final Class<?> findSystemClass(String name) throws ClassNotFoundException {
throw new ClassNotFoundException(name);
}
protected final Class<?> findLoadedClass(ClassLoader loader, String name) {
if (loader != null) {
return loader.findLoadedClass(name);
} else {
return findBootstrapClassOrNull(name);
}
}
protected final void setSigners(Class<?> c, Object[] signers) {
c.setSigners(signers);
}
public URL getResource(String name) {
throw new UnsupportedOperationException("Method not supported");
}
public Enumeration<URL> getResources(String name) throws IOException {
throw new UnsupportedOperationException("Method not supported");
}
protected Enumeration<URL> findResources(String name) throws IOException {
throw new UnsupportedOperationException("Method not supported");
}
protected URL findResource(String name) {
throw new UnsupportedOperationException("Method not supported");
}
protected static boolean registerAsParallelCapable() {
return true;
}
}
ClassLoader
类是一个抽象类,用于加载 Java 类文件到 JVM 中。它定义了一些方法来加载类文件、定义类、解析类等。不同的类加载器可以实现自定义的类加载行为,例如从网络、数据库或其他来源加载类文件。ClassLoader
的子类通常会重写 findClass
方法来实现自定义的类加载逻辑。