English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
L'eccezione è un problema che si verifica durante l'esecuzione del programma (errore di runtime). Per comprendere meglio, vediamolo in modo diverso.
Di solito, quando si compila un programma, se non viene creato un file .class durante la compilazione, questo file è un file eseguibile in Java e dovrebbe essere eseguito con successo ogni volta che si esegue questo file .class per eseguire ogni riga del programma senza problemi. Tuttavia, in alcune situazioni speciali, la JVM incontra alcune situazioni ambigue durante l'esecuzione del programma che non sanno come gestire.
Ecco alcune soluzioni di esempio-
Se la dimensione dell'array è 10, una riga di codice tenta di accedere all'undicesimo elemento dell'array.
Se si tenta di dividere un numero per zero (il risultato è infinito e il JVM non può calcolarlo).
Di solito, quando si verifica un'eccezione, il programma si interrompe bruscamente alla riga che ha causato l'eccezione, impedendo all'altro parte del programma di essere eseguita. Per prevenire questo, è necessario gestire le eccezioni.
Per gestire le eccezioni, Java fornisce il meccanismo di blocco try-catch.
Un blocco try / catch viene messo intorno al codice che potrebbe generare un'eccezione. Il codice all'interno del blocco try / catch viene chiamato codice protetto.
try { // Codice protetto } catch (ExceptionName e1) { // Blocco catch }
Quando si lancia un'eccezione all'interno di un blocco try, la JVM termina i dettagli dell'eccezione, ma non il programma, li memorizza nello stack delle eccezioni e entra nel blocco catch.
La dichiarazione catch riguarda l'indicazione del tipo di eccezione che si vuole catturare. Se si verifica un'eccezione nel blocco try, questa viene trasmessa al blocco catch successivo.
Se viene elencato il tipo di eccezione che si verifica nel blocco catch, l'eccezione viene trasmessa al blocco catch nello stesso modo in cui si trasmette un argomento a un parametro del metodo.
import java.io.File; import java.io.FileInputStream; public class Test { public static void main(String args[]){ System.out.println("Hello"); try{ File file = new File("my_file"); FileInputStream fis = new FileInputStream(file); } System.out.println("Il percorso del file specificato non è stato trovato"); } } }
Risultato di output
Il percorso del file specificato non è stato trovato
Il blocco finally si trova dopo il blocco try o catch. Un blocco finally viene sempre eseguito, indipendentemente dal fatto che si verifichi o meno un'eccezione.
public class ExcepTest { public static void main(String args[]) { int a[] = new int[2]; try { System.out.println("Accedi all'elemento tre: " + a[3]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Eccezione lanciata: " + e); }finally { a[0] = 6; System.out.println("Valore dell'elemento primo: " + a[0]); System.out.println("L'istruzione finally viene eseguita"); } } }
Risultato di output
Eccezione lanciata: java.lang.ArrayIndexOutOfBoundsException: 3 Valore dell'elemento primo: 6 L'istruzione finally viene eseguita