Eccezioni Java - Prova... Cattura


Eccezioni Java

Durante l'esecuzione del codice Java possono verificarsi diversi errori: errori di codifica commessi dal programmatore, errori dovuti a input errati o altre cose imprevedibili.

Quando si verifica un errore, Java normalmente si arresta e genera un messaggio di errore. Il termine tecnico per questo è: Java genererà un'eccezione (genera un errore).


Java prova a catturare

L' tryistruzione consente di definire un blocco di codice da testare per verificare la presenza di errori durante l'esecuzione.

L' catchistruzione consente di definire un blocco di codice da eseguire, se si verifica un errore nel blocco try.

Le parole chiave trye catchsono in coppia:

Sintassi

try {
  //  Block of code to try
}
catch(Exception e) {
  //  Block of code to handle errors
}

Considera il seguente esempio:

Questo genererà un errore, perché myNumbers[10] non esiste.

public class Main {
  public static void main(String[ ] args) {
    int[] myNumbers = {1, 2, 3};
    System.out.println(myNumbers[10]); // error!
  }
}

L'output sarà qualcosa del genere:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
        at Main.main(Main.java:4)

Se si verifica un errore, possiamo utilizzare try...catchper catturare l'errore ed eseguire del codice per gestirlo:

Esempio

public class Main {
  public static void main(String[ ] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    }
  }
}

L'output sarà:

Something went wrong.

Infine

L' finallyistruzione ti consente di eseguire il codice, dopo try...catch, indipendentemente dal risultato:

Esempio

public class Main {
  public static void main(String[] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    } finally {
      System.out.println("The 'try catch' is finished.");
    }
  }
}

L'output sarà:

Something went wrong.
The 'try catch' is finished.


La parola chiave lancio

L' throwistruzione consente di creare un errore personalizzato.

L' throwistruzione viene utilizzata insieme a un tipo di eccezione . Ci sono molti tipi di eccezioni disponibili in Java: ArithmeticException, FileNotFoundException, ArrayIndexOutOfBoundsException, SecurityException, ecc:

Esempio

Genera un'eccezione se l' età è inferiore a 18 (stampa "Accesso negato"). Se l'età ha 18 anni, stampa "Accesso concesso":

public class Main {
  static void checkAge(int age) {
    if (age < 18) {
      throw new ArithmeticException("Access denied - You must be at least 18 years old.");
    }
    else {
      System.out.println("Access granted - You are old enough!");
    }
  }

  public static void main(String[] args) {
    checkAge(15); // Set age to 15 (which is below 18...)
  }
}

L'output sarà:

Exception in thread "main" java.lang.ArithmeticException: Access denied - You must be at least 18 years old.
        at Main.checkAge(Main.java:4)
        at Main.main(Main.java:12)

Se l' età avesse 20 anni, non avresti un'eccezione:

Esempio

checkAge(20);

L'output sarà:

Access granted - You are old enough!

Mettiti alla prova con gli esercizi

Esercizio:

Inserisci le parti mancanti per gestire l'errore nel codice seguente.

 {
  int[] myNumbers = {1, 2, 3};
  System.out.println(myNumbers[10]);
}  (Exception e) {
  System.out.println("Something went wrong.");
}