2012-04-04 60 views
10

我可以定義多個靜態塊嗎?我可以定義多個靜態塊嗎?

如果可能,爲什麼我應該定義多個靜態塊?

+6

關於第一個問題,當你嘗試會發生什麼? – beny23 2012-04-04 12:45:50

+0

聽起來像是一個家庭作業問題......它的工作在提問時表現出嚴謹的表現。 – jamesTheProgrammer 2012-04-04 12:48:18

回答

19

是的,你也可以做多個初始化塊。

這使您可以將代碼與初始化的東西放在一起。

private static final Map<String, String> map; 
static { 
    // complex code to initialise map 
} 

private static final DbConnection conn; 
static { 
    // handle any exceptions and initialise conn 
} 
3

您可以定義多個靜態塊。但我認爲這不是必要的。但是如果你定義,那麼它們將被順序執行。我的意思是先定義的靜態塊先執行,然後下一個塊執行。

2

是的。可以在java類中定義多個靜態塊。它有助於模塊化初始化代碼,從而有助於更好地理解和讀取代碼的性質(如彼特所提到的)。

4
public class TryInitialisation { 
static int[] values = new int[10]; 
static{ 
    System.out.println("running initialisation block"); 
    for (int i=0; i< values.length; i++) 
     values[i] = (int) (100.0 * i); 
} 
static{ 
    System.out.println("running initialisation block"); 
    for (int i=0; i< values.length; i++) 
     values[i] = (int) (200.0 * i); 
} 
static{ 
    System.out.println("running initialisation block"); 
    for (int i=0; i< values.length; i++) 
     values[i] = (int) (300.0 * i); 
} 
void listValues(){ 
    for (int i=0; i<values.length; i++) 
     System.out.println(" " + values[i]); 
} 
public static void main(String[] args) { 

TryInitialisation example = new TryInitialisation(); 
example.listValues(); 
example = new TryInitialisation(); // referencing a new object of same type 
example.listValues(); 
} 

} 

這裏是輸出:

running initialisation block 
running initialisation block 
running initialisation block 
0 
300 
600 
900 
1200 
1500 
1800 
2100 
2400 
2700 
0 
300 
600 
900 
1200 
1500 
1800 
2100 
2400 
2700 
相關問題