【发布时间】:2017-04-29 21:32:32
【问题描述】:
我有这门课:
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 错误。 奇怪的是,日志中没有任何错误指向静态块的任何内容,调试器也没有在静态构造函数处停止,所以我认为问题出在其他地方。
【问题讨论】:
-
你能提供一个MVCE吗?无法重现您的问题并从其他类调用 Validator.validate() 对我来说很好。
-
你说得对,当我用上面的代码做一个孤立的例子时,没有出现问题,我会做一些研究并在几分钟内更新问题
标签: java string static final static-block