Habe ein kleine Frage zu Exceptions. Beim unterem code wollte ich fragen ob das gleichzeitige aufrufen von Exception möglich ist? Kann man zwei Exceptions erzeugen in der gleichen Klasse?
Java:
classHosenExceptionextendsException{}classDessousExceptionextendsException{}classWäsche {voidwaschen()throwsHosenException,DessousException{System.out.print("haha"+" ");thrownewHosenException();}}publicclassFoo1{publicstaticvoidmain(String[] args){Wäsche wäsche =newWäsche();try{
wäsche.waschen();}catch(HosenException hex){System.out.print("Stretchhosen sind ok"+" "); hex.printStackTrace();}catch(DessousException dex){System.out.println("und normale Jeans sind manchmal auch gut");}}}
In dem Moment wo ein Programm eine Exception wirft können zwei Dinge geschehen:
- Das Programm stürzt ab
- Das Programm fängt die Exception und behandelt sie.
Zwischen diesen beiden Fällen gibt es nichts, es kann nur immer eine aktive Exception (pro Thread) geben.
Aber du kannst natürlich unterschiedliche Exceptions in verschiedenen if-Zweigen verschiessen:
Also könnte man nicht beide Exception quasi parallel oder nacheinander laufen lassen, so das die print() Ausgaben nebeneinander stehen würden, wie oben?
Oder es geht einfach nicht wegen der Logik.
Über Threads müsste ich noch mehr erfahren, wahrscheinlich in den nächsten Kapiteln des Buchs.
Aber vielleicht könnte man sich Threads auch innerhalb von Prozessen auf Prozesserebene vorstellen.
Also könnte man nicht beide Exception quasi parallel oder nacheinander laufen lassen, so das die print() Ausgaben nebeneinander stehen würden, wie oben?
Parallel nicht, nacheinander schon. Wenn eine Exception fliegt dann wird an dieser Stelle im Programmcode abgebrochen, die Methode/Konstruktor verlassen, es läuft quasi alles rückwärts durch die Caller, bis irgendwo ein catch steht. Das wird dann ausgeführt, und dann geht es hinter dem catch bzw. den catch-Blöcken, falls es mehrere gibt, weiter. (nicht dort, wo die Exception geflogen ist!) Wenn kein catch gefunden wird, stürzt das Programm vollständig ab. Also nein, es können nicht beide catch-Blöcke hintereinander aufgerufen werden, weil immer nur eine Exception zur LAufzeit existiert (wie gesagt pro Thread) und immer nur ein einziger catch-Block (am besten) dazu passt.