Je pense que vous et/ou les autres réponses confondent deux constructions syntaxiques distinctes, à savoir les initialisateurs d'instance et les blocs. (Et d'ailleurs, un "bloc nommé" est en réalité un Labeled Statement, où le Statement se trouve être un Block).
Un initialisateur d'instance est utilisé au niveau syntaxique d'un membre de classe ; par exemple
public class Test {
final int foo;
{
// Some complicated initialization sequence; e.g.
int tmp;
if (...) {
...
tmp = ...
} else {
...
tmp = ...
}
foo = tmp;
}
}
La construction Initializer est le plus souvent utilisée avec des classes anonymes comme dans l'exemple de @dfa. Un autre cas d'utilisation est l'initialisation compliquée d'attributs "finaux", comme dans l'exemple ci-dessus. (Cependant, il est plus courant de faire cela en utilisant un constructeur régulier. Le modèle ci-dessus est plus couramment utilisé avec les initialisateurs statiques).
L'autre construction est un bloc ordinaire et apparaît à l'intérieur d'un bloc de code tel que la méthode ; par ex.
public void test() {
int i = 1;
{
int j = 2;
...
}
{
int j = 3;
...
}
}
Les blocs sont le plus souvent utilisés dans le cadre d'instructions de contrôle pour regrouper une séquence d'instructions. Mais lorsque vous les utilisez au-dessus, ils vous permettent (simplement) de restreindre la visibilité des déclarations ; par ex. j
dans ce qui précède.
Cela indique généralement que vous devez remanier votre code, mais ce n'est pas toujours évident. Par exemple, on voit parfois ce genre de choses dans les interprètes codés en Java. Les instructions dans les bras de commutation pourraient être intégrées dans des méthodes distinctes, mais cela peut entraîner une baisse significative des performances de la "boucle interne" d'un interpréteur, par exemple
switch (op) {
case OP1: {
int tmp = ...;
// do something
break;
}
case OP2: {
int tmp = ...;
// do something else
break;
}
...
};
8 votes
Eh bien, j'ai tendance à les utiliser en conjonction avec
if
,else
,for
,while
,do
,switch
etcase
.5 votes
Par ailleurs, moi aussi, mais j'ai décidé de ne pas exclure les utilisations qui me semblaient évidentes, comme celles que vous avez mentionnées.