使用类加载器加载数组

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)

Jea*_*ard 3

他们根本不一样,

\n\n

Class.forName返回与给定名称的类关联的Class对象。

\n\n

在您的示例中,您给出了代表类名称的loadClassa ,而不是直接给出了一个类。String

\n\n

此方法确实允许您给出名称,但它必须是binary name类的名称,而不仅仅是类名称。

\n\n

作为 String 参数提供给 ClassLoader 中方法的任何类名都必须是 Java\xe2\x84\xa2 语言规范中定义的二进制名称。

\n