È possibile eseguire questa operazione ma è necessario uscire dal blocco statico generando un'eccezione: è possibile ripetere l'analisi dell'eccezione rilevata o di una nuova. Generalmente questa eccezione deve essere RuntimeException
. Davvero non dovresti prendere un generico Exception
ma eccezioni più specifiche che potrebbero essere lanciate dal tuo blocco try
. Infine, se un inizializzatore statico genera un'eccezione, renderà la classe inutilizzabile durante quella specifica esecuzione poiché la JVM tenterà di inizializzare la classe solo una volta. I tentativi successivi di utilizzare questa classe genereranno un'altra eccezione, ad esempio NoClassDefFoundError
.
Quindi, al lavoro, il vostro initializer dovrebbe leggere qualcosa di simile:
static {
try {
...
} catch (Exception e) {
e.PrintStackTrace();
throw new InitializationFailedException("Could not init class.", e);
}
}
Supponendo che InitializationFailedException
è una consuetudine RuntimeException
, ma è possibile utilizzare uno esistente.
fonte
2010-02-26 07:02:04
È possibile eseguire un'eccezione dal 'blocco di inizializzazione statico'. Cosa posso fare quando un codice nel 'blocco di inizializzazione statico 'genera qualche eccezione che non voglio gestire. –
è possibile inizializzare le variabili all'esterno del blocco catch try, ad es. facendo il codice di lancio delle eccezioni in try catch e inizializzando finalmente ... – awk
@awk: avrebbe bisogno di usare i locali per fare il compito se il codice di lancio delle eccezioni è la chiamata al metodo getString (...). –