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 ...
}