Per rendere un programma Java il più solido possibile, deve essere in grado di gestire le eccezioni. Il compilatore fa la sua parte non consentendo di compilare un programma fino a quando non è sintatticamente corretto e può anche indicare eccezioni verificate che devono essere gestite. Ma le eccezioni che possono causare la maggior parte dei mal di testa sono quelle che appaiono quando il programma è in esecuzione. Per aiutare a gestire queste eccezioni, il linguaggio Java fornisce i blocchi try-catch-finally.
Il
provareIl blocco racchiude tutte le istruzioni che potrebbero causare un'eccezione. Ad esempio, se stai leggendo dati da un file usando il
FileReaderclasse, ci si aspetta che tu gestisca il file
IOExceptionsassociato all'utilizzo di a
FileReaderoggetto, ad esempio,
FileNotFoundExceptione
IOException. Per garantire che ciò accada, è possibile inserire le dichiarazioni relative alla creazione e all'utilizzo di
FileReaderoggetto all'interno di a
provareblock: Tuttavia, il codice è incompleto perché, affinché l'eccezione venga gestita, abbiamo bisogno di un posto per essere catturato. Questo succede nel
Il
catturarei blocchi forniscono un posto per gestire l'eccezione generata dalle istruzioni all'interno di a
provarebloccare. Il
catturareil blocco viene definito direttamente dopo il
provarebloccare. Deve specificare il tipo di eccezione che sta gestendo. Ad esempio, il
FileReaderl'oggetto definito nel codice sopra è in grado di lanciare a
FileNotFoundExceptiono un
IOException. Possiamo specificare due
catturareblocchi per gestire entrambe queste eccezioni: In
FileNotFoundExceptioncatchblocchiamo potremmo inserire il codice per chiedere all'utente di trovare il file per noi e quindi provare a leggere nuovamente il file. Nel
IOExceptioncatch block, potremmo semplicemente trasmettere l'errore I / O all'utente e chiedere loro di provare qualcos'altro. In entrambi i casi, abbiamo fornito un modo al programma di rilevare un'eccezione e gestirla in modo controllato.
catturarebloccare. Se il codice che volessimo inserire nei due
catturarei blocchi sopra erano esattamente gli stessi, potremmo invece scrivere il codice in questo modo: per fare un po 'di pulizie per quanto riguarda le risorse, possiamo aggiungere un blocco infine. Dopotutto, vogliamo rilasciare il file che abbiamo letto una volta terminato.
Le istruzioni nel blocco finally vengono sempre eseguite. Ciò è utile per ripulire le risorse in caso di esecuzione del blocco try senza eccezioni e nei casi in cui esiste un'eccezione. In entrambe le eventualità, possiamo chiudere il file che abbiamo utilizzato.
Il blocco finally appare direttamente dopo l'ultimo blocco catch: