Jede Exception erbt von Throwable folgende Methoden:
public String getMessage()
public void printStackTrace()
public String toString() // Klassennamen und FehlertextEigene Exceptions definieren:
class MeineException1 extends Exception { }
class MeineException2 extends Exception {
MeineException2(String s) { super(s); }
}Try-Catch
try {
// Code, der Exceptions auslösen kann
} catch (ArithmeticException e) {
// Behandlung arithmetischer Fehler
} catch (NullPointerException | IndexOutOfBoundsException e) {
// Behandlung von Nullpointer- und Indexfehlern
} finally {
// "Aufräumarbeiten", die immer auszuführen sind
}Throws
Jede Methode kann festlegen, ob sie Exceptions mit catch fängt:
Scanner getScanner(String s) {
try {
return new Scanner(new File(s));
} catch (FileNotFoundException e) {
return null;
}
}Oder mit throws weitergibt:
Scanner getScanner(String s) throws FileNotFoundException {
return new Scanner(new File(s));
}Bei RuntimeExceptions darf die throws-Klausel weggelassen werden (der Compiler ergänzt diese automatisch).
Throw
class Test {
public static void main(String[] args) throws Exception {
// ...
throw new Exception("Exception Text");
}
}Arten von Exceptions
Checked exceptions
- Compiler verlangt, dass sie im ganzen Programm ordnungsgemäß mit
catchabgefangen werden oder mitthrowsweitergeleitet werden - Beispiel:
IOException,FileNotFoundException
Unchecked exceptions
- Compiler verlangt keinen catch oder weiterleitung
- Beispiel:
RuntimeException(daraus werden alle unchecked exceptions abgeleitet),ArithmeticException(div by zero),NullPointerException
Einwickeln
Will man vermeiden, dass checked exceptions abgefangen oder weitergeleitet werden müssen, so kann man die checked exception “einwickeln”:
try {
new Scanner(new File("Datei"));
} catch (FileNotFoundException e) { // checked exception
throw new RuntimeException(e); // unchecked exception
}