Java throw vs. throws: Exception Handling mit praktischen Beispielen meistern
Java throw vs. throws: Exception Handling mit praktischen Beispielen meistern
Dieser Leitfaden erklärt, wie Sie Javas throw und throws Schlüsselwörter für effektives Exception Handling nutzen – illustriert mit realitätsnahen Code-Beispielen.
In Java fallen Exceptions in zwei Kategorien:
- Unchecked Exceptions – nicht zur Kompilierzeit, sondern zur Laufzeit verifiziert. Beispiele:
ArithmeticException,NullPointerException,ArrayIndexOutOfBoundsExceptionund alle Unterklassen vonError. - Checked Exceptions – vom Compiler erzwungen. Beispiele:
IOException,InterruptedExceptionund viele mehr.
Für einen tieferen Einstieg siehe Java Exceptions.
Unchecked Exceptions signalisieren meist Programmierfehler; sie sollten korrigiert statt gefangen werden. Checked Exceptions hingegen repräsentieren Bedingungen, die Aufrufer kennen und behandeln müssen.
Das throws-Schlüsselwort verwenden
Die throws-Klausel deklariert, dass eine Methode eine oder mehrere Exceptions werfen kann, und delegiert die Verantwortung an Aufrufer. Ihre Syntax ist:
accessModifier returnType methodenName() throws ExceptionType1, ExceptionType2 { /* Code */ }
Sie können mehrere Exception-Typen, durch Kommas getrennt, auflisten.
Beispiel 1: Checked Exception deklarieren
import java.io.*; class Haupt { public static void dateiFinden() throws IOException { // Code, der IOException auslösen kann File neueDatei = new File("test.txt"); FileInputStream stream = new FileInputStream(neueDatei); } public static void main(String[] args) { try { dateiFinden(); } catch (IOException e) { System.out.println(e); } } }
Ausgabe:
java.io.FileNotFoundException: test.txt (No such file or directory)
Falls test.txt fehlt, wirft FileInputStream eine FileNotFoundException, eine Unterklasse von IOException. Da dateiFinden() throws IOException deklariert, muss die main()-Methode die Exception behandeln oder weiterleiten.
Mehrere Exceptions werfen
Sie können mehrere Exception-Typen in einer einzelnen throws-Klausel deklarieren:
import java.io.*; class Haupt { public static void dateiFinden() throws NullPointerException, IOException, InvalidClassException { // Potenziell wirft NullPointerException … // Potenziell wirft IOException … // Potenziell wirft InvalidClassException … } public static void main(String[] args) { try { dateiFinden(); } catch (IOException e1) { System.out.println(e1.getMessage()); } catch (InvalidClassException e2) { System.out.println(e2.getMessage()); } } }
Beachten Sie, dass NullPointerException unchecked ist, daher muss sie vom Aufru nicht gefangen oder deklariert werden.
Wann throws vs. try...catch verwenden
Das Einbetten von try...catch in jede Methode, die eine Exception werfen könnte, kann Code verunreinigen und Logik verschleiern. throws zu deklarieren hält die Methodensignatur sauber und erlaubt höherem Code, zu entscheiden, wie Fehler behandelt werden.
Das throw-Schlüsselwort verwenden
Das throw-Statement wirft explizit eine Exception-Instanz und überträgt Kontrolle zum nächstpassenden catch-Block oder beendet das Programm, wenn unbehandelt.
Syntax:
throw werfbaresObjekt;
Hier ist werfbaresObjekt eine Instanz von Throwable oder einer seiner Unterklassen.
Beispiel 2: Unchecked Exception werfen
class Haupt { public static void durchNullTeilen() { throw new ArithmeticException("Versuche durch 0 zu teilen"); } public static void main(String[] args) { durchNullTeilen(); } }
Ausgabe:
Exception in thread "main" java.lang.ArithmeticException: Versuche durch 0 zu teilen at Haupt.durchNullTeilen(Haupt.java:3) at Haupt.main(Haupt.java:7) exit status 1
Da ArithmeticException unchecked ist, ist das Fangen optional.
Beispiel 3: Checked Exception werfen
import java.io.*; class Haupt { public static void dateiFinden() throws IOException { throw new IOException("Datei nicht gefunden"); } public static void main(String[] args) { try { dateiFinden(); System.out.println("Restlicher Code im try Block"); } catch (IOException e) { System.out.println(e.getMessage()); } } }
Ausgabe:
Datei nicht gefunden
Hier wirft dateiFinden() ein checked IOException, sodass Aufrufer es entweder behandeln oder deklarieren müssen. Die main()-Methode demonstriert das Abfangen der Exception und verhindert Programmabbruch.
Java
- Java Variablen und Literale: Umfassender Leitfaden
- Java Ein- und Ausgabe meistern: Drucken, Lesen und Formatieren Ihrer Daten
- Java Ausdrücke, Anweisungen und Blöcke verstehen
- Java Klassen und Objekte: Praktischer Leitfaden
- Java abstrakte Klassen und Methoden: Ein umfassender Leitfaden
- Java verschachtelte und innere Klassen meistern: Typen, Beispiele und Best Practices
- Multi-Exception Handling in Java meistern
- Java Autoboxing und Unboxing meistern: Praktische Beispiele und Best Practices
- Java String-Ersetzung meistern: replace(), replaceAll() und replaceFirst() erklärt
- Java String toLowerCase() & toUpperCase(): Text-Groß-/Kleinschreibung mit Locale-Bewusstsein konvertieren