Domanda

A volte vedo

try {

} catch(Throwable e) {

}

E a volte

try {

} catch(Exception e) {

}

Qual è la differenza

È stato utile?

Soluzione

Per la cattura Throwable include cose che sottoclasse Error. Non si dovrebbe in genere fare questo, tranne forse al più alto "catturare tutti" livello di un thread in cui si desidera accedere o gestire assolutamente tutto ciò che può andare storto. Sarebbe più tipico di un'applicazione di tipo quadro (ad esempio un server applicativo o di un framework di test) in cui può essere in esecuzione codice sconosciuto e non deve essere influenzata da niente che va male con quel codice, come più possibile.

Altri suggerimenti

La prima cattura tutte le sottoclassi di Throwable (questo include Exception e Error ), la seconda cattura tutte le sottoclassi di < a href = "http://java.sun.com/javase/6/docs/api/java/lang/Exception.html" rel = "noreferrer"> Exception .

Error programmaticamente irrecuperabile in alcun modo e di solito non essere catturati, tranne che per scopi di registrazione (che passa attraverso di nuovo). Exception è programmaticamente recuperabile. La sua RuntimeException sottoclasse indica un errore di programmazione e di solito non essere catturati pure.

Throwable è super classe di Exception così come Error. In casi normali dovremmo sempre prendere sottoclassi di Exception, in modo che la causa principale non si perde.

Solo i casi particolari in cui si vede la possibilità che qualcosa vada male, che non ha il controllo del codice Java, si dovrebbe prendere Error o Throwable.

  

Mi ricordo la cattura di Throwable per segnalare che una libreria nativa non è stato caricato.

Thowable cattura davvero tutto, anche ThreadDeath che viene gettato per impostazione predefinita per fermare un filo dal metodo Thread.stop() ormai deprecato. Quindi, con la cattura di Throwable si può essere sicuri che non avrai mai lasciare il blocco try senza almeno passare attraverso la vostra blocco catch, ma si dovrebbe essere pronti a gestire anche OutOfMemoryError e InternalError o StackOverflowError.

Facendo Throwable è più utile per il server esterno cicli che delegare tutti i tipi di richieste al codice esterno, ma può essa stessa non terminerà mai per mantenere in vita il servizio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top