我有這個類:的Java:靜態塊結果靜態最後絃樂人口的NoClassDefFoundError
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 BTW。
UPDATE:
的問題是在靜態塊一個java錯誤。 奇怪的是,日誌中沒有指向靜態塊的任何錯誤,調試器也沒有在靜態構造函數中停止,所以我認爲這個問題在其他地方說謊。
你能提供[MVCE](http://stackoverflow.com/help/mcve)嗎?無法重現您的問題,並從其他類調用Validator.validate()對我來說工作得很好。 –
你是對的,當我用上面的代碼做一個獨立的例子,問題不會發生,我會做一些研究並在幾分鐘內更新問題 –