Eccezione selezionata rispetto all'eccezione di runtime
Le eccezioni sono tipi speciali di eventi, che possono disturbare il normale flusso del programma. Il nome eccezione deriva da "evento eccezionale". Lanciare un'eccezione è il processo di creazione di un oggetto eccezione e di consegna al sistema runtime. Quando il sistema runtime riceve l'oggetto eccezione, proverà a trovare qualcuno che lo gestisca all'interno dello stack di chiamate attraversandolo nell'ordine inverso (in cui sono stati chiamati i metodi). Il sistema runtime ha esito positivo se trova un metodo con un gestore di eccezioni. Il gestore delle eccezioni è un blocco di codice che può ufficialmente gestire la suddetta eccezione. Se il sistema runtime trova un gestore appropriato, passerà l'oggetto eccezione al gestore. Questo si chiama cattura dell'eccezione. Tuttavia, se l'eccezione non può essere gestita, il programma verrà terminato. In Java,le eccezioni ereditano dalla classe Throwable. Le eccezioni selezionate sono eccezioni su cui la gestione viene applicata dal compilatore. Le eccezioni di runtime sono un tipo di eccezioni, che non vengono controllate dal compilatore.
Che cos'è un'eccezione controllata?
Le eccezioni selezionate sono oggetti della classe java.lang.exception o delle sue sottoclassi (eccetto java.lang. RuntimeException e le sue sottoclassi). Le eccezioni verificate vengono "verificate" in fase di compilazione. Ciò significa che il programmatore deve catturare o lanciare queste eccezioni, altrimenti la compilazione si lamenterebbe (causando un errore del compilatore). Per questo motivo, molte eccezioni verificate sono ben note ai programmatori. Ad esempio, l'IOException e le sue sottoclassi sono eccezioni controllate e ogni volta che il programmatore ha a che fare con l'accesso o la modifica di un file, il compilatore controlla per assicurarsi che tutte le possibili IOException siano prese in carico dal programmatore.
Cos'è un'eccezione di runtime?
Le eccezioni di runtime sono costituite da java.lang. RuntimeException e tutte le sue sottoclassi. Teoricamente parlando, hanno lo stesso scopo delle eccezioni verificate e possono essere lanciate o gestite come eccezioni verificate, ma la loro gestione non è imposta dal compilatore. Pertanto, le eccezioni di runtime appartengono alla famiglia delle eccezioni non controllate. NullPointerException, NumberFormatEception, ClassCastException e ArrayIndexOutOfBoundsException sono eccezioni di runtime comuni in Java.
Qual è la differenza tra l'eccezione controllata e l'eccezione di runtime?
Sebbene sia le eccezioni controllate che le eccezioni di runtime siano occorrenze indesiderate durante l'esecuzione di un programma, hanno le loro differenze. La gestione delle eccezioni verificate viene applicata dal compilatore, ma le eccezioni di runtime non lo sono. Pertanto, le eccezioni controllate devono essere lanciate o gestite affinché il codice possa essere compilato, ma non esiste tale requisito per quanto riguarda le eccezioni di runtime. Di conseguenza, le eccezioni di runtime appartengono alla categoria delle eccezioni non controllate insieme agli errori.
Lo svantaggio con le eccezioni controllate è che il programmatore deve gestirlo anche se non sa come farlo. Quindi, se il programmatore lancia una nuova eccezione senza avvolgere l'originale, la traccia dello stack appartenente all'eccezione originale andrà persa. È qui che tornano utili le eccezioni di runtime. Poiché tutte le eccezioni di runtime possono essere gestite in un unico punto, i programmatori possono scrivere una quantità minore di codice. D'altra parte, poiché le eccezioni controllate devono essere catturate, non c'è sorpresa per il programmatore. Saprà sempre quale eccezione controllata potrebbe essere generata da un determinato metodo. Contrariamente a ciò, è possibile lanciare varie eccezioni di runtime all'insaputa del programmatore.