所以我確實讀過了什麼以及何時執行靜態initalizer的線索。 Static initializer in Java。但是我遇到了一些別人寫的舊代碼,似乎無法理解他爲什麼會像他那樣使用它。Java靜態初始化器似乎是多餘的
我的班級:
public class ClassA extends Thread {
.... private vars ....
private static Config config;
static {
config = null;
}
public ClassA(Config config) {
ClassA.config = config;
}
}
他爲什麼不只是這樣做?
public class ClassA extends Thread {
.... private vars ....
private static Config config = null;
public ClassA(Config config) {
ClassA.config = config;
}
}
我的理解是靜態initalizer權的構造函數之前和之後得到調用的類被redenered,因此它設置配置=>空,而如果我不使用靜態initalizer,實例變量得到initalizer超。那麼這兩個班級不會做同樣的事情嗎?
所以可以說我可以使用第二個實現並且不會改變任何功能。 – Churk 2012-04-17 15:21:00
也許該類的作者首先做了一些更復雜的初始化,然後刪除它,然後不刪除靜態初始化器。但這只是一個猜測。無論如何,你的答案是準確無誤的(+1)。 – 2012-04-17 15:21:16
@Churk在這種特殊情況下?是。 – 2012-04-17 15:21:17