2012-06-06 47 views
1
try { 
    MyClass[] myClass = cProxy.getMyClass(); 
    return "" + myClass[0]; 
} catch (Exception e) { 
    // nothing to do 
} 
return "" + MyClass.UNKNOWN; <-- NoClassDefFoundError thrown 

我从其他对象MyClass的对象,我只是想知道为什么,而不是线为什么在调用类的静态变量时抛出NoClassDefFoundError?

MyClass[] myClass = cProxy.getMyClass(); 

做了异常抛出时调用MyClass的类的静态变量“MyClass.UNKNOWN”?

NoClassDefFoundError和ClassNotFoundException的深层含义是什么?谢谢

回答

1

这里是关于这两个例外的java Docs的摘录。

NoClassDefFoundError: 如果Java虚拟机或ClassLoader实例试图在类的定义中加载(作为普通方法调用的一部分,或者作为使用新表达创建新实例的一部分),并且没有抛出该异常可以找到该类的定义。 编译当前正在执行的类时存在搜索到的类定义,但无法再找到该定义。

ClassNotFoundException : 当应用程序试图使用通过字符串名加载类抛出该异常: •Class类中的forName方法。 •类ClassLoader中的findSystemClass方法。 •类ClassLoader中的loadClass方法。 但可以找到具有指定名称的类的定义。

1

你在你的try catch块中捕获所有异常。 删除try catch,或者在catch中打印异常,并在使用cProxy.getMyClass()时看到相同的异常;

捕捉所有异常并不是一个好习惯!

+0

NoClassDefFoundError没有被try..catch块捕获,因为它捕获异常并且错误不是异常子类。 – Averroes

相关问题