try und catch in Java
Wickle den schlechten slots[5]-Zugriff in try und catch, damit das Programm nicht bei ArrayIndexOutOfBoundsException endet. Drucke blocked im catch, danach after außerhalb beider Blöcke. Kompiliere Guard.java und starte java Guard. Der Bildschirm soll blocked, dann after zeigen. Eine zweite Datei hält slots[0] in try, sodass catch übersprungen wird und der Bildschirm 2, dann after zeigt. Lass throw für die nächste Seite.
Den schlechten Index fangen
Die Exceptions-Seite zeigte: slots[5] auf {2, 4} wirft ArrayIndexOutOfBoundsException und stoppt. Diese Seite behält dieselbe Array-Geschichte und ergänzt Handling. Öffne eine neue Übungsdatei Guard.java. Halte den öffentlichen Klassennamen Guard, damit er zum Dateinamen passt. Lösche übrig gebliebene Alarm-mains ohne catch, Crate-Integer-Listen und jedes Scanner oder nextLine. Das Programm darf nicht auf Tastatur warten.
In main behalte dasselbe kleine Array:
int[] slots = {2, 4};
Lege den schlechten print in try:
System.out.println(slots[5]);
Schreibe dann einen catch, der ArrayIndexOutOfBoundsException nennt und blocked druckt. Nach dem ganzen try und catch drucke after. Der catch-Parameter darf ein kurzer Buchstabe wie e sein; das Exception-Objekt musst du auf dieser Seite nicht drucken.
public class Guard {
public static void main(String[] args) {
int[] slots = {2, 4};
try {
System.out.println(slots[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("blocked");
}
System.out.println("after");
}
}
Aus dem Ordner mit Guard.java führe javac Guard.java aus. Wenn Klammern, geschweifte Klammern und Semikolons passen, schreibt javac keine eigene Zeile. Dann java Guard — nicht java Guard.java. Lass die Endung .java beim Startbefehl weg.
Der Bildschirm zeigt blocked, dann after. Der schlechte Index wirft weiterhin in try. Der catch behandelt diese genannte Exception und druckt blocked. Die Zeile System.out.println("after"); steht außerhalb, läuft also weiter. Das Programm endet nicht an diesem Stopp wie die nackte schlechte Alarm-Datei.
Stell dir einen zweiten print noch in demselben try nach slots[5] vor, etwa eine Zeile, die rice drucken würde. Diese Zeile läuft nicht. Das Fangen geht nicht zurück und beendet den Rest von try nicht. Nur der catch-Körper läuft für diesen Stopp, danach geht es nach dem catch weiter. Halte die Idee klar: Handling überspringt die restlichen Zeilen in try nach dem Wurf-Punkt.
Wenn das Terminal auf Tastatur wartet, steckt noch ein nextLine aus einer älteren Übung in einer Datei. Lösche diesen Aufruf. Siehst du nur einen Stack-Report ohne blocked, fehlt der catch oder der Exception-Name passt nicht. Siehst du nur 2 ohne after, läufst du vielleicht noch eine alte sichere Alarm-Datei — wechsle zu java Guard mit der catch-Übungsdatei.
Wenn try fertig wird, bleibt catch still
Ein zweites Programm nutzt dieselbe try- und catch-Form, aber der print in try fragt einen geschriebenen Slot: slots[0]. Jede Zeile in try endet. Der catch-Körper läuft nicht.
public class Guard {
public static void main(String[] args) {
int[] slots = {2, 4};
try {
System.out.println(slots[0]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("blocked");
}
System.out.println("after");
}
}
Kompiliere mit javac Guard.java, dann starte java Guard. Der Bildschirm zeigt 2, dann after. Das Wort blocked erscheint nicht, weil es kein ArrayIndexOutOfBoundsException gab. Der catch blieb still. Die after-Zeile läuft weiter, weil sie außerhalb beider Blöcke steht — dieselbe Stelle wie in der catch-Demo.
Geh den Kontrast einmal durch. Erste Datei: schlechter Index, catch druckt blocked, dann after. Zweite Datei: sicherer Index, catch übersprungen, Bildschirm 2, dann after. Beide behalten Guard und denselben catch-Typnamen. Nur der Index in try ändert sich. Diese eine Änderung zeigt, wann catch läuft und wann nicht.
Erfinde auf dieser Seite kein throw. Du fängst eine Exception, die ein schlechter Array-Zugriff schon auslöst. Die nächste Seite geht um absichtliches Werfen. Wickle heute auch nicht jeden ruhigen print des Kurses in try — diese Lektion nutzt try, wo ein bekannter schlechter Index einen behandelten Pfad braucht.
Der catch-Name muss passen
Die catch-Klausel nennt einen Exception-Typ. Auf dieser Seite ist das ArrayIndexOutOfBoundsException, passend zum schlechten Index. Schreibst du stattdessen catch (NullPointerException e) um slots[5], behandelt dieser catch den Stopp nicht. Das Programm endet weiterhin mit ArrayIndexOutOfBoundsException, und weder blocked noch after erscheinen für diesen unpassenden catch. Behalte den passenden Typ in den Übungsdateien.
Andere Exception-Namen gibt es in Java. Diese Seite bleibt bei einem klaren Paar: schlechter Array-Index und ArrayIndexOutOfBoundsException. Du brauchst vor dem Üben dieser Form keinen Katalog aller fangbaren Typen. Passe den Namen an, den du auf der Exceptions-Seite gesehen hast.
Vergleich mit dem nackten Alarm-Stopp
Auf der Exceptions-Seite stoppte java Alarm mit slots[5] und zeigte einen Stack-Report. Auf dieser Seite druckt java Guard mit demselben schlechten Index blocked und läuft bis after. Die Array-Geschichte änderte sich nicht. Das Handling schon. Behalte Alarm-Dateien nur als Geschichte, wenn sie noch in der Nähe liegen; starte java Guard für die catch-Demos, damit der Bildschirm zu dieser Lektion passt.
Wrappers-Geschichte druckt weiterhin 9 aus einer Integer-Liste, wenn du die ältere Datei behältst. Dieser Pfad ist nicht die catch-Geschichte. Lösche oder ignoriere übrig gebliebene ArrayList<Integer>-Demos in Guard.java, damit die Übungsdatei bei int[] slots plus try und catch bleibt.
Was diese Seite für throwing lässt
Diese Seite fängt eine Exception, die eine Zeile schon trifft. Die nächste Seite führt throw ein, damit du selbst ein Problem melden kannst. Bleib hier bei passendem catch und dem Weiterlaufen von after. Füge noch kein manuelles throw als Pflicht in diese Guard-Dateien ein.
Vor dem throwing
Du kannst ArrayIndexOutOfBoundsException von slots[5] fangen und blocked, dann after sehen. Du kannst slots[0] in try halten und 2, dann after sehen, mit übersprungenem catch. Kompiliere Guard.java und starte java Guard für jede behaltene Demo nacheinander. Der catch-Name passte zum schlechten-Index-Stopp. Die nächste Seite ist throwing, wo du absichtlich einen Stopp auslöst.
Behalte die catch-Demo für einen behandelten Pfad. Behalte das sichere try für ein ruhiges Überspringen von catch. Halte manuelles throw von dieser Seite fern. Diese drei Gewohnheiten sind der Checkpoint vor dem Weitergehen. Wenn nach dem schlechten-Index-Lauf von java Guard zuerst blocked und dann after erscheinen, haben try und catch ihre Arbeit für diese Lektion erledigt und du bist bereit für das nächste Thema über throwing.
🧠 Testen Sie Ihr Wissen
Testen Sie Ihr Wissen
Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen
📝 Anweisungen
- Lesen Sie jede Frage sorgfältig
- Wählen Sie die beste Antwort für jede Frage
- Sie können das Quiz so oft wiederholen, wie Sie möchten
- Ihr Fortschritt wird oben angezeigt