【问题标题】:Why NoClassDefFoundError thrown when calls the static variables of the class?为什么调用类的静态变量时会抛出 NoClassDefFoundError?
【发布时间】:2012-06-10 05:34:03
【问题描述】:
try {
  MyClass[] myClass = cProxy.getMyClass();
  return "" + myClass[0];
} catch (Exception e) {
  // nothing to do
}
return "" + MyClass.UNKNOWN; <-- NoClassDefFoundError thrown

我从其他对象获得了 MyClass 对象,我只是想知道为什么而不是 line

MyClass[] myClass = cProxy.getMyClass();

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

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

【问题讨论】:

    标签: java noclassdeffounderror classnotfoundexception


    【解决方案1】:

    以下是关于这两个异常的 java Docs 的摘录。

    NoClassDefFoundError: 如果 Java 虚拟机或 ClassLoader 实例尝试加载类的定义(作为正常方法调用的一部分或作为使用 new 表达式创建新实例的一部分)并且找不到类的定义,则抛出此异常。 搜索到的类定义在编译当前执行的类时已经存在,但找不到该定义。

    ClassNotFoundException : 当应用程序尝试通过其字符串名称加载类时抛出: • Class 类中的forName 方法。 • ClassLoader 类中的 findSystemClass 方法。 • ClassLoader 类中的loadClass 方法。 但找不到具有指定名称的类的定义。

    【讨论】:

      【解决方案2】:

      您在 try catch 块中捕获所有异常。 去掉try catch,或者在catch中打印异常,使用cProxy.getMyClass()会看到同样的异常;

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

      【讨论】:

      • NoClassDefFoundError 没有被 try..catch 块捕获,因为它捕获 Exception 并且 Error 不是 Exception 子类。
      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      相关资源
      最近更新 更多