public class SomeHelper {
    ...
    private int static x;
    static {
        Map<String, String> aMap = new HashMap<>();
        //populate map here
    }
    public static void setX(int value){
       x = value;
    }
}


调用SomeHelper.setX时,出现“无法初始化类SomeHelper类”异常。我不确定如何解决此问题。有人遇到这个问题吗?我试图捕获该异常并将其作为运行时异常从静态块中抛出,但这无济于事。

最佳答案

我认为您的意思是得到这样的NoClassDefFoundError

NoClassDefFoundError: Could not initialize class SomeHelper


JavaSE-7所述:


如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为常规方法调用的一部分或使用新表达式创建新实例的一部分),则抛出NoClassDefFoundError,并且找不到该类的定义。

当前正在编译的类在编译时就存在搜索到的类定义,但是无法再找到该定义。


如果类的静态位(即在定义类期间发生的任何初始化)失败,则有时会出现NoClassDefFoundError

所以先改变

private int static x;


至,

private static int x;


setX()声明为static,或创建SomeHelper的实例以调用setX()

要调用具有类名的任何方法,该方法应为static

尝试这个:

public static void setX(int value){
   x = value;
}

SomeHelper.setX(someInteger);


或这个:

SomeHelper someHelper = new SomeHelper (); // default constructor
someHelper .setX(someInteger);


请注意,您不必为类提供任何构造函数,但是在执行此操作时必须小心。编译器会为没有构造函数的任何类自动提供一个无参数的default constructor

09-10 23:32