Exceptions abfangen

try{
	int ergebnis = 1 / 0;
}catch(Exception e){
	System.err.println(e.getLocalizedMessage());
}finally { 
	System.out.println("Programm fertig."); 
}

Wenn im try Block ein Fehler auftritt, wird der Code abgebrochen und die Exception als e an den catch Block übergeben und dort wird der Code weiter ausgeführt. Der finally Block wird ohne Ausnahme immer ausgeführt

Verschiedene Arten von Exceptions

Es gibt viele verschiedene Klassen von Exceptions. Es können im catch Block verschiedene Arten von Exceptions abgefangen werden. Die letzte catch Anweisung sollte immer Exception abfangen um aller nicht vorher genannten Fehlertypen abzufangen.

try { 
	int ergebnis = 1 / input;
} catch (ArithmeticException e1) { 
	System.err.println("Division durch Null!"); 
} catch (InputMismatchException e2) { 
	System.err.println("Das ist keine ganze Zahl."); 
} catch (Exception e3) { 
	System.out.println("Fehler: " + e3.getLocalizedMessage());
}

Es können auch verschiedene Fehler in eine catch Block abgefangen werden

try { 
	int ergebnis = 1 / input;
} catch (ArithmeticException | InputMismatchException e1) { 
	System.out.println("Fehler: " + e3.getLocalizedMessage());
}

Beispiel

private static Scanner scan = new Scanner(System.in); // Scanner initialisieren
    
    public static int einlesen() { //Funktion zum Einlesen einer Ganzzahl
        int zahl = 0;
        try {
            zahl = Integer.parseInt(scan.nextLine()); // Einlesen
        } catch (NumberFormatException e) {
            System.out.println("Keine gültige Zahl " + e.getLocalizedMessage());
            zahl = einlesen(); //Funktion neu aufrufen
        }
        return zahl;
    }
 
    public static void main(String[] args) {
        System.out.println("Dividend:");
        int dividend = einlesen();
        System.out.println("Divisor:");
        int divisor = einlesen();
        
        int ergebnis = 0;
        int rest = 0;
        
        try{
            ergebnis = dividend / divisor; //Berechnen
            rest = dividend % divisor; //Rest berechnen
            //Das Ergebnis wird nur ausgegeben wenn kein Fehler geworfen wurde
            System.out.println("Erg: " + ergebnis + " Rest: " + rest);
        }catch(Exception e){
            System.out.println("Fehler bei der Rechenoperation"  + e.getLocalizedMessage());
        }
    }

Exceptions bei Dateizugriffen

Bei Dateizugriffen sollte das öffnen der Datei immer in den runden Klammern () des try Blocks passieren. Wenn anschließend das Programm abgebrochen wird bevor die Datei geschlossen wurde, werden diese Dateien trotzdem wieder geschlossen

try ( 
	PrintWriter out = new PrintWriter("/Pfas/zur/Datei.txt") 
) 
{ 
	out.println("Test2"); 
} catch (FileNotFoundException ex) 
{ 
	// ... Fehlermeldung ... 
}