无法初始化类com.example.testapp.SomeHelper

时间:2015-07-14 05:43:13

标签: java exception static-block

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时,我得到一个&#34;无法初始化类SomeHelper&#34;例外。我不知道如何解决这个问题。有谁遇到过这个问题?我尝试捕获异常并将其作为静态块中的运行时异常抛出,但这并没有帮助。

2 个答案:

答案 0 :(得分:1)

我认为你的意思是你得到-- Pattern match F (without using toF)??? -- Doesn't compile matchF :: Functor f => (a -> r) -> (f (F f a) -> r) -> F f a -> r matchF kp kf f = f kp kf 这样的话:

NoClassDefFoundError

正如JavaSE-7所述:

  

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

     

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

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

首先改变

NoClassDefFoundError

to,

private int static x; 

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

要使用类名调用任何方法,该方法应为setX()

试试这个:

static

或者这个:

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

SomeHelper.setX(someInteger);

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

答案 1 :(得分:0)

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

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

iii)我看到你的/js是静态块本地的。你不是在其他任何地方使用它吗?