Exception-frage

  • Themenstarter Themenstarter Triac
  • Beginndatum Beginndatum
T

Triac

Gast
Hallo,

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:
class HosenException extends Exception {}
class DessousException extends Exception {}

class Wäsche {
 
 void waschen() throws HosenException, DessousException {
   
  System.out.print("haha" + " ");
  throw new HosenException(); 
 }
}

public class Foo1 {
 public static void main(String[] args) {
  
  Wäsche wäsche = new Wä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");}
 }
}

Danke
R.
 
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:
Java:
if( begindung 1 ){
  throw new HoseException();
}
else if( bedingung 2 ){
  throw new DessousException();
}
else{
  ... irgendwas anderes ...
}
 
Ja, ist jetzt verständlich, vielen Dank.

Noch eine kleine Frage, wieso kann es nur eine aktive Exception pro Thread, geben?

Schönen Tag
R.
 
Weil wenn z.B. zwei Threads parallel laufen und einer von ihnen eine Exception wirft, läuft der andere weiter und könnte auch eine Exception werfen.
 
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.

Vielen Dank
R.
 
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.
 
Zuletzt bearbeitet:

Zurück
Oben