Vous pouvez faire cela, mais vous devez quitter le bloc statique par la levée d'une exception - vous pouvez renvoyer l'exception qui a été pris ou un nouveau. En général, cette exception doit être un RuntimeException
. Vous devriez vraiment ne pas attraper un générique Exception
mais plus exception spécifique(s) qui pourrait être levée à partir de l'intérieur de votre try
bloc. Enfin, si un initialiseur statique déclenche une exception alors il rendra la classe inutilisable au cours de cette manche particulière parce que la JVM ne tentera d'initialiser votre classe à la fois. Les tentatives ultérieures de l'utilisation de cette classe entraînera dans une autre exception, comme NoClassDefFoundError
.
Donc, pour le travail, votre initialiseur devrait lire quelque chose comme ceci:
static {
try {
...
} catch (Exception e) {
e.PrintStackTrace();
throw new InitializationFailedException("Could not init class.", e);
}
}
En supposant que l' InitializationFailedException
est une coutume RuntimeException
, mais vous pouvez en utiliser un existant.