具有私有构造函数的非静态类上的NoClassDefFoundError

时间:2017-06-20 16:07:33

标签: java constructor static private

我有一个具有私有构造函数的Java类:

aov2

这个类正在这样的应用程序中使用:

public class MyClass {
  private static final MyClass myClass = new MyClass();

  private MyClass() {}

  public static MyClass getInstance() {
    return myClass;
  }
}

整个应用程序也作为JAR导出,并在另一个应用程序中使用。

当我尝试在另一个应用程序中执行相同操作时(从JAR调用它)我收到以下错误:

MyClass myClass = MyClass.getInstance();

我不确定这是否是具有 私有构造函数 的类所需的行为,或者它是否存在其他问题?

谢谢!

3 个答案:

答案 0 :(得分:3)

您的错误与静态或构造函数无关。来自javadocs

  

如果Java虚拟机或ClassLoader实例尝试,则抛出该异常   加载类的定义(作为普通方法调用的一部分或   作为使用新表达式创建新实例的一部分)和否   可以找到类的定义。搜索过的课程   编译当前正在执行的类时存在定义,   但无法再找到定义。

NoClassDefFoundError表示当您尝试运行程序时,类定义不可用。这是某种路径错误 - 要么这个类不在导出的jar中,要么它在运行时没有被包含在类路径中。

答案 1 :(得分:1)

您确定在第二个应用程序的类路径中正确包含了JAR吗?

答案 2 :(得分:0)

NoClassDefFoundError 当JVM尝试加载作为代码执行一部分的特定类时(作为普通方法调用的一部分或作为使用new关键字创建实例的一部分)发生class不在您的类路径中,但在编译时出现,因为为了执行您的程序,您需要编译它,如果您尝试使用不存在的类,编译器将引发编译错误。