"Ciao, Amico!"

"Ciao, Ellie! Come va la vita?"

"Eccellente, grazie. Come stai?"

"Fantastico, stamattina mi sono state spiegate tantissime cose nuove."

"Beh, fantastico. Non sei stanco?"

"Sì, c'è quello. Sono un po' stanco."

"Allora sei stato solo fortunato. Volevo trattare un argomento ampio e complesso oggi, ma all'ultimo minuto ho cambiato idea e ho deciso di trattarne uno piccolo e facile."

"Piccolo e facile? Sono pronto."

"Oggi esamineremo in dettaglio il tema delle Eccezioni ".

"Stai parlando di gestione degli errori?"

"Non dovresti pensare alle eccezioni come errori. Le eccezioni sono più simili a segnalazioni che 'è accaduto qualcosa di inaspettato'. Sulla base di queste segnalazioni, puoi proporre azioni alternative."

"Riguarda i metodi.  Quando chiami un metodo, promette di fare ciò per cui è stato chiamato. "

"Quando un metodo, per qualsiasi motivo, non può fare ciò per cui è stato chiamato, deve far sapere al chiamante."

"In altre parole, la cosa peggiore che potrebbe accadere è che un metodo non faccia il suo lavoro e non lo dica a nessuno. Niente potrebbe essere peggio di così. Perdi il controllo della situazione quando ciò accade. "

"Quando sei un nuovo programmatore, sembra che chiami solo metodi e loro sono sicuri di fare quello che gli hai chiesto di fare."

"Quando sei un programmatore esperto, sai che potrebbero esserci dozzine di fattori che influenzano la capacità di un metodo di svolgere il proprio lavoro e che ci sono molti casi che potrebbero impedire a un metodo di completare il proprio lavoro."

"Dal punto di vista del programmatore, è mille volte meglio se un programma termina quando incontra un errore piuttosto che se il programma incontra un errore e poi continua a funzionare (in modo errato) senza che l'utente si renda conto di cosa è successo."

"Quindi il programma che mostra qualcosa di sbagliato potrebbe essere peggio che se il programma si chiudesse e perdesse tutti i dati?"

"Cosa ti ha fatto pensare che il programma stia semplicemente mostrando qualcosa in modo errato? Forse il programma ha molti bug e tutti i tuoi dati andranno irrimediabilmente persi? Supponiamo che tu abbia digitato del testo per 3 ore, ma nessuno di questi verrà salvato perché un errore che si è verificato dopo appena due minuti."

"Quando un programmatore alle prime armi incontra eccezioni, si sente frustrato."

"Ma in realtà, le eccezioni rivelano tutti i possibili scenari che avrebbe dovuto prevedere ma non l'ha fatto".

"Potresti scegliere di non gestire le eccezioni e questo ti renderebbe un cattivo programmatore. Ma se i tuoi metodi non generano eccezioni, allora non sei affatto un programmatore, perché non sei riuscito a capire questa semplice verità:"

"un metodo fa ciò per cui è stato scritto o genera un'eccezione. Non esiste una terza opzione!"

"Va bene, ti credo. Prometto di usare le eccezioni."

"Fantastico. Allora lascia che ti parli della gerarchia delle eccezioni:"

Gerarchia delle eccezioni, errori - 1

"La gerarchia delle eccezioni si basa su quattro classi."

"La classe base più bassa è Lanciabile ."

"Le classi Error ed Exception lo ereditano."

" RuntimeException eredita Exception ."

"La classe Error è la classe base per errori JVM come StackOverFlow , OutOfMemory , …"

"Un programma di solito non può riprendersi da tali errori, il che lo porta a terminare."

"In effetti, cosa si può fare se non c'è abbastanza memoria perché il programma continui a funzionare normalmente o si è verificato un overflow dello stack?"

" L'eccezione è la classe base per tutte le eccezioni ordinarie lanciate da un programma.  RuntimeException è un tipo speciale di eccezione che ha regole leggermente diverse."

"Quali sono?"

"Questo è proprio quello che sto per spiegare ora."

"Come probabilmente ricorderete, le eccezioni si dividono in due categorie: controllate e non controllate ."

"Se un metodo genera eccezioni verificate , il metodo che lo chiama deve avvolgere la chiamata in un blocco try-catch . Bene, o quello o rilanciare l'eccezione (al suo chiamante) indicando chiaramente i tiri nella firma del metodo."

"Queste regole/restrizioni non si applicano alle eccezioni non controllate."

"Quindi, tutte le eccezioni che ereditano Exception sono considerate controllate. Ad eccezione delle eccezioni che ereditano RuntimeException, che sono considerate non controllate."

"Uh-huh. Ricordo che prima mi avevi detto qualcosa del genere."

"Amigo! Chiedono della gerarchia delle eccezioni in ogni intervista . Lo ripeto, ogni intervista . Devi conoscere perfettamente questo argomento."

"OK. Leggerò di nuovo tutto e capirò. Grazie per avermi aiutato, Ellie."