Pour répondre à la question concernant la limitation de la portée d'une variable, au lieu de parler de la fermeture / suppression automatique des variables.
En Java, vous pouvez définir des étendues fermées et anonymes en utilisant des accolades. C'est extrêmement simple.
{
AwesomeClass hooray = new AwesomeClass()
// Great code
}
La variable hooray
n'est disponible que dans cette étendue, et non en dehors.
Cela peut être utile si vous avez des variables répétitives qui ne sont que temporaires.
Par exemple, chacun avec index. Tout comme la item
variable est fermée sur la boucle for (c'est-à-dire qu'elle n'est disponible qu'à l'intérieur), la index
variable est fermée sur la portée anonyme.
// first loop
{
Integer index = -1;
for (Object item : things) {index += 1;
// ... item, index
}
}
// second loop
{
Integer index = -1;
for (Object item : stuff) {index += 1;
// ... item, index
}
}
J'utilise également cela parfois si vous n'avez pas de boucle for pour fournir une portée de variable, mais que vous souhaitez utiliser des noms de variables génériques.
{
User user = new User();
user.setId(0);
user.setName("Andy Green");
user.setEmail("andygreen@gmail.com");
users.add(user);
}
{
User user = new User();
user.setId(1);
user.setName("Rachel Blue");
user.setEmail("rachelblue@gmail.com");
users.add(user);
}
using
fait. La portée n'est pas à vie (etusing
ne concerne pas non plus la durée de vie, à proprement parler, carDispose
ne détruit pas la mémoire d'un objet.)using statement
.using
, automatiquement dispose l'objet à la fin de son champ d' application, mais il n'a pas liberer l'objet - sa durée de vie est pas terminée jusqu'à ce que toutes ses références ont disparu.