te credo e/o le altre risposte sono confuse due costrutti sintattici distinte; ovvero Inizializzatori e blocchi di istanza. (E a proposito, un "named block" è in realtà una dichiarazione etichettata, in cui l'affermazione sembra essere un blocco.)
Un inizializzatore di istanze viene utilizzato a livello sintattico di un membro della classe; per esempio.
public class Test {
final int foo;
{
// Some complicated initialization sequence; e.g.
int tmp;
if (...) {
...
tmp = ...
} else {
...
tmp = ...
}
foo = tmp;
}
}
Il costrutto Initializer è più comunemente utilizzato con classi anonime come da esempio di @ dfa. Un altro caso d'uso è per fare un'inizializzazione complicata degli attributi 'finali'; per esempio. vedere l'esempio sopra. (Tuttavia, è più comune farlo utilizzando un costruttore normale. Il modello sopra è più comunemente usato con gli inizializzatori statici.)
L'altro costrutto è un blocco ordinario e compare all'interno di un blocco di codice come un metodo; per esempio.
public void test() {
int i = 1;
{
int j = 2;
...
}
{
int j = 3;
...
}
}
I blocchi vengono comunemente utilizzati come parte delle istruzioni di controllo per raggruppare una sequenza di istruzioni. Ma quando li usi sopra, essi (solo) ti permettono di limitare la visibilità delle dichiarazioni; per esempio. j
in quanto sopra.
Questo di solito indica che è necessario rifattorizzare il codice, ma non è sempre chiaro. Ad esempio, a volte si vede questo genere di cose negli interpreti codificati in Java.Le affermazioni nei bracci di commutazione potrebbero essere prese in considerazione in metodi separati, ma ciò potrebbe comportare un significativo calo delle prestazioni per il "ciclo interno" di un interprete; per esempio. La risposta di
switch (op) {
case OP1: {
int tmp = ...;
// do something
break;
}
case OP2: {
int tmp = ...;
// do something else
break;
}
...
};
fonte
2009-10-13 23:10:29
Bene, tendo ad usarli in congiunzione con 'if',' else', 'for',' while', 'do',' switch' e 'case'. –
Incidentalmente, anche io. Ma poi di nuovo, ho deciso di non escludere gli usi che (per me) sembravano ovvi, come quelli che hai menzionato. –