2012-04-04 12 views

Odpowiedz

19

tak, można również wykonać wiele bloków inicjalizacyjnych.

To pozwala na umieszczenie kodu z rzeczą zainicjowaną.

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

Można zdefiniować wiele bloków statycznych. Ale nie sądzę, że jest to naprawdę konieczne. Ale jeśli zdefiniuj, będą one wykonywane sekwencyjnie. oznacza to, że zdefiniowany najpierw blok statyczny zostanie wykonany jako pierwszy, a następny zostanie wykonany jako następny.

2

Tak. Możliwe jest definiowanie wielu bloków statycznych w klasie java. Pomaga w modularyzacji kodu inicjalizacyjnego, co z kolei pomaga w lepszym zrozumieniu i czytelności kodu (jak wspomniano przez Petera).

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(); 
} 

} 

tu jest wyjście:

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 
Powiązane problemy