Errori ed eccezioni

Tipi di dati ed eccezioni in Java

Jim White

Java Developer

Eccezioni vs errori

  • Error indica un problema grave
  • Le applicazioni non possono gestire o recuperare dagli errori
    • Gli errori fanno "crashare" o fermare l'app
    • Esempio: out of memory è un errore in Java
  • Le applicazioni possono gestire e recuperare dalle eccezioni
    • Accedere oltre i limiti di un array è un'eccezione.
Tipi di dati ed eccezioni in Java
Esempio di errore
import java.util.*;

public class CauseOutOfMemory {
    public static void main(String[] args) {
        List<Long> numbers = new ArrayList<Long>();
        long counter = 0;
        while (true) {
            numbers.add(counter);
            counter++;
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Long.valueOf(Long.java:1204)
    at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
Tipi di dati ed eccezioni in Java

Due tipi di eccezioni

Eccezione checked Eccezione runtime ("unchecked")
Richiede gestione No
Causa generale Fattori fuori dal nostro controllo Errori di programmazione
Recupero Di solito possibile se previsto Di solito non recuperabile
Meccanismo di recupero try/catch o throws Meglio evitarle con buon codice
Esempio di eccezione File non trovato Indice array fuori limite
Tipi di dati ed eccezioni in Java

Eccezioni checked e runtime

  • Le sottoclassi di Exception che non sono anche sottoclassi di RuntimeException sono checked exceptions
    • Vanno gestite (cioè handle)
    • Es.: file non trovato (FileNotFoundException)
  • RuntimeException è la superclasse di tutte le unchecked exceptions
    • Non richiedono gestione
    • Es.: accesso a un indice di array inesistente (IndexOutOfBoundsException)
    • Es.: divisione per zero (ArithmeticException)
Tipi di dati ed eccezioni in Java

RuntimeException

Sottoclasse di RuntimeException Quando viene lanciata
ArithmeticException Operazioni aritmetiche errate, es. divisione per 0
IndexOutOfBoundsException Indice per array, String, ecc. fuori intervallo
NegativeArraySizeException Creazione di un array con dimensione negativa
int y = 5/0; // Codice che causa ArithmeticException
int[] list = new int[-1];  //Codice che causa NegativeArraySizeException
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 Vedi https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Tipi di dati ed eccezioni in Java

Eccezioni "checked"

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
deve essere gestita o dichiarata come lanciata
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 Vedi https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Tipi di dati ed eccezioni in Java

Ayo berlatih!

Tipi di dati ed eccezioni in Java

Preparing Video For Download...