Pourquoi ne permet pas de Java pour lever une exception du bloc de l’initialisation statique ? Quelle était la raison derrière cette décision de conception ?
Toute aide serait grandement appréciée.
Merci.
Pourquoi ne permet pas de Java pour lever une exception du bloc de l’initialisation statique ? Quelle était la raison derrière cette décision de conception ?
Toute aide serait grandement appréciée.
Merci.
Parce qu'il n'est pas possible de traiter ces exceptions dans votre source. Vous n'avez aucun contrôle sur le processus d'initialisation et statique{} blocs ne peuvent pas être appelés à partir de votre source de sorte que vous pouvez les entourer avec des try-catch.
Parce que vous ne pouvez pas gérer toute erreur, il a été décidé d'interdire l'exception des jets dans les blocs statiques.
Mise à jour: Merci intervenants pour la correction. Le bloc statique ne faut pas jeter checked exceptions, mais permet toujours pas cochée/exécution-les exceptions à être jetés. Mais selon les raisons ci-dessus, vous seriez incapable de gérer ces deux.
Pour résumer, cette restriction empêche (ou du moins la rend plus difficile pour le promoteur de la construction de quelque chose qui peut entraîner des erreurs à partir de laquelle la demande serait pas en mesure de récupérer.
Il devrait ressembler à ceci (ce n'est pas valable code Java)
static throws SomeCheckedException {
throw new SomeCheckedException();
}
mais comment pourrait-annonce où vous rattraper? Vérifié les exceptions doivent être à la chasse. Imaginez quelques exemples qui peuvent initialiser la classe (ou ne peut pas car il est déjà initialisé), et juste pour attirer l'attention de la complexité de ce qu'il présenterait, j'ai mis les exemples dans un autre statique initalizer:
static {
try {
ClassA a = new ClassA();
Class<ClassB> clazz = Class.forName(ClassB.class);
String something = ClassC.SOME_STATIC_FIELD;
} catch (Exception oops) {
// anybody knows which type might occur?
}
}
Et une autre chose désagréable"
interface MyInterface {
final static ClassA a = new ClassA();
}
Imaginez ClassA avait un initialiseur statique jeter un checked exception: Dans ce cas MyInterface (qui est une interface avec un "cachée" de l'initialiseur statique) aurait pour jeter de l'exception ou de la gérer - gestion des exceptions, à l'interface? Mieux le laisser tel qu'il est...
Jetez un oeil à des Spécifications du langage Java: il est dit que c’est une erreur de compilation si statique initialiseur <strike>échoue</strike> est capable de terminer brusquement avec une exception vérifiée.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.