Rin*_*ing 5 java class loader classloader
我正在尝试运行此代码:
public class ClassLoaderTest
{
public static void main(String[] args) throws Exception
{
Object[] obj = new Object[]{};
String cname = obj.getClass().getName();
System.out.println(cname);
ClassLoaderTest.class.getClassLoader().loadClass(cname);
}
}
Run Code Online (Sandbox Code Playgroud)
但它会抛出ClassNotFoundException.有趣的是,如果我改为使用这一行:
Class.forName(cname);
Run Code Online (Sandbox Code Playgroud)
它工作得很好.
这里发生了什么?
编辑:我正在使用Java 6. println打印此:
[Ljava.lang.Object;
Run Code Online (Sandbox Code Playgroud)
他们根本不一样,
\n\nClass.forName返回与给定名称的类关联的Class对象。
在您的示例中,您给出了代表类名称的loadClassa ,而不是直接给出了一个类。String
此方法确实允许您给出名称,但它必须是binary name类的名称,而不仅仅是类名称。
作为 String 参数提供给 ClassLoader 中方法的任何类名都必须是 Java\xe2\x84\xa2 语言规范中定义的二进制名称。
\n