In Java, c'è un modo per ottenere (catturare) tutto exceptions
invece di catturare l'eccezione individualmente?
In Java, c'è un modo per ottenere (catturare) tutto exceptions
invece di catturare l'eccezione individualmente?
Risposte:
Se vuoi, puoi aggiungere clausole throws ai tuoi metodi. Quindi non devi prendere subito i metodi controllati. In questo modo, puoi catturare il exceptions
secondo (forse contemporaneamente agli altri exceptions
).
Il codice ha questo aspetto:
public void someMethode() throws SomeCheckedException {
// code
}
Quindi più tardi puoi occuparti di exceptions
se non vuoi affrontarli con quel metodo.
Per catturare tutte le eccezioni, alcuni blocchi di codice potrebbero generare: (Questo rileverà anche che Exceptions
hai scritto tu stesso)
try {
// exceptional block of code ...
// ...
} catch (Exception e){
// Deal with e as you please.
//e may be any type of exception at all.
}
Il motivo per cui funziona è perché Exception
è la classe base per tutte le eccezioni. Quindi qualsiasi eccezione che può essere generata è una Exception
('E' maiuscola).
Se vuoi gestire le tue eccezioni, aggiungi semplicemente un catch
blocco prima di quello generico.
try{
}catch(MyOwnException me){
}catch(Exception e){
}
Anche se sono d'accordo che non sia un buon stile catturare un'eccezione grezza, ci sono modi per gestire le eccezioni che forniscono una registrazione superiore e la capacità di gestire l'imprevisto. Dal momento che sei in uno stato eccezionale, probabilmente sei più interessato a ottenere buone informazioni che ai tempi di risposta, quindi l'istanza delle prestazioni non dovrebbe essere un grande successo.
try{
// IO code
} catch (Exception e){
if(e instanceof IOException){
// handle this exception type
} else if (e instanceof AnotherExceptionType){
//handle this one
} else {
// We didn't expect this one. What could it be? Let's log it, and let it bubble up the hierarchy.
throw e;
}
}
Tuttavia, questo non prende in considerazione il fatto che IO può anche generare errori. Gli errori non sono eccezioni. Gli errori sono sotto una gerarchia di ereditarietà diversa da Exceptions, sebbene entrambi condividano la classe base Throwable. Poiché IO può generare errori, potresti voler arrivare al punto di catturare Throwable
try{
// IO code
} catch (Throwable t){
if(t instanceof Exception){
if(t instanceof IOException){
// handle this exception type
} else if (t instanceof AnotherExceptionType){
//handle this one
} else {
// We didn't expect this Exception. What could it be? Let's log it, and let it bubble up the hierarchy.
}
} else if (t instanceof Error){
if(t instanceof IOError){
// handle this Error
} else if (t instanceof AnotherError){
//handle different Error
} else {
// We didn't expect this Error. What could it be? Let's log it, and let it bubble up the hierarchy.
}
} else {
// This should never be reached, unless you have subclassed Throwable for your own purposes.
throw t;
}
}
Cattura l'eccezione di base "Eccezione"
try {
//some code
} catch (Exception e) {
//catches exception and all subclasses
}
È una cattiva pratica rilevare l' eccezione : è semplicemente troppo ampia e potresti perdere qualcosa come una NullPointerException nel tuo codice.
Per la maggior parte delle operazioni sui file, IOException è l'eccezione principale. Meglio prenderlo, invece.
Si C'è.
try
{
//Read/write file
}catch(Exception ex)
{
//catches all exceptions extended from Exception (which is everything)
}
Puoi intercettare più eccezioni in un unico blocco di cattura.
try{
// somecode throwing multiple exceptions;
} catch (Exception1 | Exception2 | Exception3 exception){
// handle exception.
}
Intendi catturare un Exception
qualsiasi tipo che viene lanciato, al contrario di solo specifiche eccezioni?
Se è così:
try {
//...file IO...
} catch(Exception e) {
//...do stuff with e, such as check its type or log it...
}