繁体   English   中英

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

[英]NoClassDefFoundError on Non-static class with private constructor

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

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

  private MyClass() {}

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

此类在应用程序中的用法如下:

MyClass myClass = MyClass.getInstance();

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

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

java.lang.NoClassDefFoundError: Could not initialize class com.example.MyClass

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

谢谢!

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

如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为常规方法调用的一部分或使用新表达式创建新实例的一部分)而抛出,则找不到该类的定义。 当前正在编译的类在编译时就存在搜索到的类定义,但是无法再找到该定义。

NoClassDefFoundError表示在尝试运行程序时类定义不可用。 这是某种路径错误-此类不在导出的jar中,或者在运行时未包含在类路径中。

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

当JVM尝试加载代码执行过程中的特定类(作为常规方法调用的一部分或使用new关键字创建实例的一部分)并且该类不在您的类路径中但存在时,发生NoClassDefFoundError在编译时,因为要执行程序,您需要对其进行编译;如果尝试使用不存在的类,则编译器将引发编译错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM