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。