Fehler und Ausnahmen

Datentypen und Exceptions in Java

Jim White

Java Developer

Exceptions vs. Errors

  • Error ist ein schwerwiegendes Problem
  • Anwendungen können mit Errors nicht umgehen oder sich davon erholen
    • Errors lassen die Anwendung „abstürzen" oder stoppen
    • Beispiel: Ein Out-of-Memory-Problem ist in Java ein Error
  • Anwendungen können mit Exceptions umgehen und sich erholen
    • Der Zugriff außerhalb der Array-Grenzen ist eine Exception.
Datentypen und Exceptions in Java
Beispiel: Error
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)
Datentypen und Exceptions in Java

Zwei Arten von Exceptions

Checked Exception Runtime-("unchecked")-Exception
Behandlung erforderlich Ja Nein
Allgemeine Ursache Außerhalb unserer Kontrolle Unsere Programmierfehler
Erholung Bei Erwartung oft möglich Meist nicht möglich
Mechanismus zur Erholung try/catch oder throws Sorgfältig coden, um sie zu vermeiden
Beispiel Datei nicht gefunden Arrayindex außerhalb des Bereichs
Datentypen und Exceptions in Java

Checked- und Runtime-Exceptions

  • Exception-Unterklassen, die nicht auch Unterklassen von RuntimeException sind, sind checked exceptions
    • Müssen behandelt werden
    • Bsp.: Datei nicht gefunden (FileNotFoundException)
  • RuntimeException ist die Oberklasse aller unchecked exceptions
    • Müssen nicht behandelt werden
    • Bsp.: Zugriff auf einen nicht vorhandenen Arrayindex (IndexOutOfBoundsException)
    • Bsp.: Division durch Null (ArithmeticException)
Datentypen und Exceptions in Java

RuntimeException

Unterklasse von RuntimeException Wann wird sie ausgelöst?
ArithmeticException Fehlerhafte Arithmetik wie Division durch 0
IndexOutOfBoundsException Index für Array, String etc. außerhalb des Bereichs
NegativeArraySizeException Array mit negativer Größe anlegen
int y = 5/0; // Code, der eine ArithmeticException auslöst
int[] list = new int[-1];  // Code, der eine NegativeArraySizeException auslöst
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Datentypen und Exceptions in Java

„Checked"-Exception

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
must be caught or declared to be thrown
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Datentypen und Exceptions in Java

Lass uns üben!

Datentypen und Exceptions in Java

Preparing Video For Download...