0
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”异常。我不知道如何解决这个问题。有人遇到过这个问题吗?我尝试捕获异常并将其作为运行时异常从静态块中重新抛出,但这无济于事。

4

2 回答 2

1

我想你的意思是你得到NoClassDefFoundError这样的:

NoClassDefFoundError: Could not initialize class SomeHelper

正如JavaSE-7所述:

如果 Java 虚拟机或 ClassLoader 实例尝试加载类的定义(作为正常方法调用的一部分或作为使用 new 表达式创建新实例的一部分)并且找不到类的定义,则抛出 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);

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

于 2015-07-14T05:45:49.813 回答
0

i) 将方法设为静态以使用 className 调用它。

ii) 类未初始化表示初始化未正确发生,这可能是由于静态块中的异常。

iii)我看到你Map<String, String> aMap的静态块是本地的。你不是在别的地方用吗?

于 2015-07-14T06:10:38.490 回答