Java:静态块中的静态最终字符串填充导致 NoClassDefFoundError

Java: static final String population in static block results in NoClassDefFoundError

我有这个class:

public final class Validator {

    private static final String TEST_VALUE = "test";
    private static final String TEST;

    static {
        TEST = TEST_VALUE + "_test";
    }

    private Validator() {}

    public static void validate() {
        //Do something with TEST
    }
}

当我从其他地方调用 Validator.validate() 时,我得到一个 java.lang.NoClassDefFoundError: Could not initialize ....Validator

据我了解 Static block in Java not executed,最终静态字符串是在编译时预填充的。

如果变量只定义在静态块中,是否会出现这种情况?我希望编译器不会尝试预填充最终变量。

如果不是这样...可能是什么错误?

使用调试器我注意到静态块从未执行过,但我不明白为什么...

这是 Java 8 顺便说一句。

更新:

问题是静态块中的 java 错误。 奇怪的是,日志中没有指向静态块的任何错误,调试器也没有在静态构造函数处停止,所以我认为问题出在其他地方。

static {
    TEST = TEST_VALUE + "_test";
}

可能不是您的真实代码,因为它不会导致任何运行时异常。
你上升了一个java.lang.NoClassDefFoundError因为你可能在静态块中遇到了异常:

static {
        TEST = TEST_VALUE + "_test";
      }

这会阻止加载 class。

您应该检查是否适当记录了至少在程序的标准输出中可能发生的任何异常。