CodeGym/Corsi/Collezioni Java/Throwable, eccezioni multiple, eccezioni all'interno del ...

Throwable, eccezioni multiple, eccezioni all'interno del metodo finalize

Disponibile

"Ah. Eccoti. Ti stavo cercando."

"È successo qualcosa?"

"No, ma stiamo ancora studiando."

"OK. Sto ascoltando."

"Voglio dirti ancora un paio di cose sulle eccezioni:"

"In Java 7, il costrutto try-catch è stato leggermente esteso attraverso l'aggiunta di più blocchi catch. Guarda questo esempio:"

Giava 5
try
{}
 catch (IOException ex)
{
 logger.log(ex);
 throw ex;
}
 catch (SQLException ex)
{
 logger.log(ex);
 throw ex;
}
Giava 7
try
{}
 catch (IOException | SQLException ex)
{
 logger.log(ex);
 throw ex;
}

"Quindi ora possiamo scrivere più eccezioni separate da operatori OR ('|' è OR binario)?"

"Esatto. Non è conveniente?"

"Hmm. Ma quale sarà il tipo dell'oggetto eccezione all'interno del blocco catch?"

"Dopotutto, una IOException ha i suoi metodi e una SQLException ha i suoi metodi."

"Il tipo di eccezione sarà quello della loro classe antenata comune."

"Ah. In altre parole, molto probabilmente sarà Exeption o RuntimeException . Allora perché non scrivere semplicemente catch(Exception e)?"

"A volte quando si gestiscono gli errori individualmente, è conveniente raggrupparli, scrivere alcuni errori in un registro, rilanciarne altri e gestirne altri in qualche altro modo."

"In altre parole, questo schema è riconosciuto per risolvere il problema dei blocchi catch duplicati per la gestione di errori diversi."

"Ah. Ho capito. Grazie, Ellie."

"Non è tutto. Voglio dirti qualcosa in più sul blocco finally ."

"Come probabilmente già saprai, questo blocco viene sempre eseguito."

"E quando dico sempre, intendo assolutamente sempre ."

"Per esempio:"

Esempio usando finalmente
try
{
 return 1;
}
 finally
{
 return 0;
}

"Qui c'è un ritorno nel blocco try e un ritorno nel blocco finally . Quindi il valore restituito da questo metodo sarà il numero 0."

"Il blocco finally verrà eseguito qualunque cosa accada. E la sua istruzione return sovrascrive l'altro valore restituito con il proprio valore."

"Vedo."

"Tuttavia, un metodo può restituire un valore o generare un'eccezione. "

"Quindi, se un valore viene restituito in un blocco try, ma il blocco finally genera un'eccezione , il risultato sarà un'eccezione . "

"Cosa succede se viene generata un'eccezione nel blocco try ma il blocco finally ha un'istruzione return?"

"Quindi è come se il metodo funzionasse correttamente e venisse restituito il valore nell'istruzione return.

Esempio Risultato
try
{
 return 1;
}
 finally
{
 return 0;
}
0
try
{
 return 1;
}
 finally
{
 throw new RuntimeException();
}
RuntimeException
try
{
 throw new RuntimeException();
}
 finally
{
 return 0;
}
0
try
{
 throw new RuntimeException();
}
 finally
{
 throw new IOException();
}
IOException

"L'unico motivo per cui il metodo finally potrebbe non essere eseguito sarebbe la terminazione immediata del programma mediante una chiamata al metodo System.exit() ;."

Esempio
try
{
 System.exit(0);
 return 1;
}
 finally
{
 return 0;
}

"Vedo."

"Tieni presente che tutti questi argomenti vengono solitamente richiesti nelle interviste, quindi sarebbe bene che tu li capissi e li ricordassi."

Commenti
  • Popolari
  • Nuovi
  • Vecchi
Devi avere effettuato l'accesso per lasciare un commento
Questa pagina non ha ancora commenti