In questo tutorial sulle eccezioni Java, scopri cos’è un’eccezione in Java, cos’è un’eccezione controllata e come è diversa da un’eccezione non controllata. Impareremo anche alcune best practice sulle eccezioni controllate Java.
Table of Contents1. What is an exception in Java?2. Checked vs unchecked exceptions in Java3. Java exception handling best practices
Che cos’è un’eccezione in Java?
“Un’eccezione è un evento imprevisto che si verifica durante l’esecuzione di un programma che interrompe il normale flusso di istruzioni.,”
In Java, tutti gli errori e le eccezioni sono rappresentati con la classe Throwable. Quando si verifica un errore all’interno di un metodo, il metodo crea un oggetto (di qualsiasi sottotipo di Throwable
) e lo passa al sistema di runtime. L’oggetto, chiamato oggetto di eccezione.
Oggetto Eccezione contiene informazioni sull’errore, compreso il tipo e lo stato del programma quando si è verificato l’errore. La creazione di un oggetto di eccezione e la consegna al sistema di runtime viene chiamata lancio di un’eccezione.
1.1., Gestione delle eccezioni
Abbiamo due scelte quando viene creato un oggetto di eccezione nella nostra applicazione.
- O lo gestiremo all’interno del metodo
- O possiamo passarlo al metodo del chiamante per lasciarlo gestire.
Questa è una decisione molto importante da prendere durante l’impostazione delle responsabilità di un metodo. Un metodo dovrebbe indicare chiaramente che ciò che tutti gli scenari eccezionali gestirà e che non lo farà. È definito nella sintassi del metodo usando la clausola throws.
Per gestire l’eccezione, dobbiamo catturare l’eccezione nella sezione catch del blocco try-catch.,
If an exception is not handled in the application, then it will propagate to JVM and JVM will usually terminate the program itself.
Checked vs unchecked exceptions in Java
2.1. Exception Hierarchy
In Java, exceptions are broadly categorized into two sections: checked exceptions and unchecked exceptions.
2.2. Checked Exceptions
Java forces you to handle these error scenarios in some manner in your application code., Verranno immediatamente in faccia, una volta che si avvia la compilazione del programma. Puoi sicuramente ignorarli e lasciarli passare a JVM, ma è una cattiva abitudine. Idealmente, è necessario gestire queste eccezioni a un livello adeguato all’interno dell’applicazione in modo da poter informare l’utente sull’errore e chiedergli di riprovare/ venire più tardi.
Generalmente, le eccezioni controllate indicano scenari di errore che sono al di fuori del controllo immediato del programma. Si verificano di solito interagendo con risorse esterne / risorse di rete, ad esempio problemi di database, errori di connessione di rete, file mancanti ecc.,
Checked exceptions are subclasses of Exception class.
Example of checked exceptions are : ClassNotFoundException, IOException, SQLException and so on.
Checked Exception Example
FileNotFoundException
is a checked exception in Java. Anytime, we want to read a file from filesystem, Java forces us to handle error situation where file may not be present in place.
public static void main(String args) { FileReader file = new FileReader("somefile.txt");}
In above case, you will get compile time error with message – Unhandled exception type FileNotFoundException
.,
Per rendere il programma in grado di compilare, è necessario gestire questa situazione di errore nel blocco try-catch
. Sotto dato codice compilerà assolutamente bene.
2.3. Eccezioni deselezionate
Java fornisce anche UncheckedExceptions, le cui occorrenze non sono controllate dal compilatore. Entreranno in vita / si verificheranno nel tuo programma, una volta eseguito qualsiasi codice buggy.
Un metodo non è costretto dal compilatore a dichiarare le eccezioni non controllate generate dalla sua implementazione. Generalmente, tali metodi quasi sempre non li dichiarano, pure.,
Le eccezioni non selezionate sono sottoclassi di RuntimeException. Esempio di eccezioni non selezionate sono: ArithmeticException
, ArrayStoreException
, ClassCastException
e così via.
RuntimeException
è di per sé sottoclasse diException
cioè tutte le classi di eccezioni non controllate dovrebbero essere state controllate implicitamente, MA non lo sono.”Esempio di eccezione non controllato
Verifica il codice indicato di seguito. Il codice sopra non fornisce alcun errore di compilazione., Ma quando l’esempio, lancia NullPointerException
. NullPointerException è un’eccezione deselezionata in Java.
Ricorda la più grande differenza tra eccezioni controllate e non controllate è che le eccezioni controllate sono forzate dal compilatore e utilizzate per indicare condizioni eccezionali che sono fuori dal controllo del programma (ad esempio, errori di I/O), mentre le eccezioni non controllate si verificano durante il runtime e vengono utilizzate per indicare errori di programmazione (ad esempio, un puntatore nullo).,
Java exception handling best practice
- Le eccezioni controllate possono essere utilizzate quando un metodo non può fare ciò che il suo nome dice che fa. ad esempio, un metodo chiamato prepareSystem() che pre-popolare i file di configurazione e fare qualche configurazione che li utilizza, può dichiarare throwing
FileNotFoundException
che implica che il metodo utilizza i file di configurazione dal file system. - Le eccezioni controllate idealmente non dovrebbero mai essere utilizzate per errori di programmazione, ma dovrebbero assolutamente essere utilizzate per errori di risorse e per il controllo del flusso in questi casi.,
- Lancia solo quelle eccezioni che un metodo non può gestire in alcun modo. Il metodo dovrebbe prima provare a gestirlo non appena incontra. Lancia l’eccezione solo se non è possibile gestire il metodo interno.
- Un buon modo per definire le firme dei metodi è dichiarare eccezioni vicine al nome del metodo. Se il tuo metodo si chiama
openFile
, allora ci si aspetta di lanciareFileNotFoundException
?. Se il tuo metodo si chiamafindProvider
, allora ci si aspetta di lanciareNoSuchProviderException
.,Inoltre, questo tipo di eccezioni dovrebbe essere fatto eccezioni controllate in quanto costringe il chiamante a gestire i problemi inerenti alla semantica dei metodi.
- La regola è se ci si può ragionevolmente aspettare che un client si riprenda da un’eccezione, rendila un’eccezione controllata. Se un client non può fare nulla per recuperare dall’eccezione, renderlo un’eccezione non selezionata.
In realtà, la maggior parte delle applicazioni dovrà recuperare praticamente da tutte le eccezioni tra cui
NullPointerException
,IllegalArgumentExceptions
e molte altre eccezioni non controllate., L’azione / transazione fallita verrà interrotta ma l’applicazione deve rimanere attiva ed essere pronta a servire l’azione / transazione successiva.L’unica volta che normalmente è legale spegnere un’applicazione è durante l’avvio. Ad esempio, se manca un file di configurazione e l’applicazione non può fare nulla di sensato senza di esso, allora è legale chiudere l’applicazione.,
Conclusione
In questo post, abbiamo appreso la differenza tra eccezioni controllate e non controllate in Java, insieme a come gestire le eccezioni non controllate, la gerarchia delle eccezioni in Java con esempi.
Sentitevi liberi di cadere le vostre domande nei commenti.
Buon apprendimento !!,
- Asynchronous and synchronous exceptions
- exception handling using inner classes
- exception handling best practices
- effectively handle NullPointerException
- Custom exceptions in Java
- Java exception doc
Leave a Reply