Gli errori sono la rovina degli utenti e dei programmatori. Gli sviluppatori ovviamente non vogliono che i loro programmi cadano ad ogni turno e gli utenti sono ora così abituati ad avere errori nei programmi che a malincuore accettano di pagare il prezzo per il software che quasi sicuramente avrà almeno un errore. Java è progettato per offrire al programmatore un'opportunità sportiva nella progettazione di un'applicazione senza errori. Ci sono eccezioni che il programmatore saprà che sono possibili quando un'applicazione interagisce con una risorsa o un utente e queste eccezioni possono essere gestite. Sfortunatamente, ci sono eccezioni che il programmatore non può controllare o semplicemente trascura. In breve, tutte le eccezioni non sono create uguali e quindi ci sono diversi tipi a cui un programmatore deve pensare.
Un'eccezione è un evento che impedisce al programma di fluire nell'esecuzione prevista. Esistono tre tipi di eccezione: l'eccezione selezionata, l'errore e l'eccezione di runtime.
Le eccezioni controllate sono eccezioni che un'applicazione Java dovrebbe essere in grado di affrontare. Ad esempio, se un'applicazione legge i dati da un file, dovrebbe essere in grado di gestire FileNotFoundException
. Dopotutto, non vi è alcuna garanzia che il file previsto sarà dove dovrebbe essere. Tutto potrebbe succedere sul file system, di cui un'applicazione non avrebbe idea.
Per fare un ulteriore esempio di questo esempio. Diciamo che stiamo usando FileReader
classe per leggere un file di caratteri. Se dai un'occhiata alla definizione del costruttore FileReader nell'API Java vedrai la sua firma del metodo:
public FileReader (String fileName) genera FileNotFoundException
Come puoi vedere, il costruttore afferma specificamente che FileReader
il costruttore può lanciare a FileNotFoundException
. Questo ha senso in quanto è altamente probabile che il nome del file
Di tanto in tanto la stringa sarà sbagliata. Guarda il seguente codice:
public static void main (String [] args) FileReader fileInput = null; // Apri il file di input fileInput = new FileReader ("Untitled.txt");
Sintatticamente le istruzioni sono corrette ma questo codice non verrà mai compilato. Il compilatore conosce il FileReader
il costruttore può lanciare a FileNotFoundException
e spetta al codice chiamante gestire questa eccezione. Ci sono due scelte: in primo luogo possiamo trasmettere l'eccezione dal nostro metodo specificando a getta
anche la clausola:
public static void main (String [] args) genera FileNotFoundException FileReader fileInput = null; // Apri il file di input fileInput = new FileReader ("Untitled.txt");
Oppure possiamo effettivamente gestire con l'eccezione:
public static void main (String [] args) FileReader fileInput = null; provare // Aprire il file di input fileInput = new FileReader ("Untitled.txt"); catch (FileNotFoundException ex) // indica all'utente di andare a cercare il file
Le applicazioni Java ben scritte dovrebbero essere in grado di far fronte alle eccezioni verificate.
Il secondo tipo di eccezione è noto come errore. Quando si verifica un'eccezione, JVM creerà un oggetto eccezione. Questi oggetti derivano tutti dal Throwable
classe. Il Throwable
la classe ha due sottoclassi principali- Errore
e Eccezione
. Il Errore
La classe indica un'eccezione che un'applicazione non è in grado di gestire.
Queste eccezioni sono considerate rare. Ad esempio, la JVM potrebbe esaurire le risorse a causa dell'hardware non in grado di far fronte a tutti i processi che deve affrontare. È possibile che l'applicazione rilevi l'errore per avvisare l'utente, ma in genere l'applicazione deve chiudere fino a quando non viene risolto il problema sottostante.
Un'eccezione di runtime si verifica semplicemente perché il programmatore ha commesso un errore. Hai scritto il codice, tutto sembra buono per il compilatore e quando vai a eseguirlo, cade perché ha tentato di accedere a un elemento di un array che non esiste o un errore logico ha causato la chiamata di un metodo con un valore nullo. O un numero qualsiasi di errori che un programmatore può fare. Ma va bene, individuiamo queste eccezioni con test esaustivi, giusto?