Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
wenn die Exceptions nicht behandelt werden (try-und-catch-Blöcke), dann hast du auf der Standardausgabe, den Stacktrace der Exception stehen und kannst sehen welche Exception wann geschmissen worden sind.
Wenn sie innerhalb eines try/catch-Blockes behandelt werden, kannst du ja sehen, welche Exceptions ge"catched" werden, es empfiehlt sich auf die XYZ-Exception die printStackTrace() -Methode aufzurufen.
Java:
try{ //was auch immer
}catch (XYZException xyzE){
xyzE.printStackTrace();
}[/Java]
Wir hatten das Thema allerdings nur kurz angerissen und nun weiß ich gar nicht wie ich vor gehen soll.
Wenn ich nun zum Beispiel sowas habe:
Java:
class ExA extends RuntimeException {
private static final long serialVersionUID=1L;
}
class ExB extends ExA {
private static final long serialVersionUID = 2L ;
public ExB( int va ) throws ExA, ExC {
}
public ExB( String va ) throws ExA, ExC {
throw Math.random() < 0.5? new ExB(Math.random() <0.5? 1:2):new ExA();
}
}
}
dann hab ich ja keinen try - catch Block.
Hier hab ich ja zum Beispiel einen:
Java:
public static void fa (int va ,int vb) throws ExC {
try {
System.out.println( " fa : 0. " ) ;
if (va> vb) {
System.out.println( " f a : 1 . " ) ;
throw new ExB( " " ) ;
} else {
System.out.println( " f a : 2 . " ) ;
fb (Math.random() < 0.5 ? null:Math.random() < 0.5 ? " " : "ExA");
System.out.println( " f a : 3 . " ) ;
}
} catch(ExB ea ) {
System.out.println( " fa:E0−"+ea.getClass().getName()) ;
throw ea ;
} catch (ExA eb ) {
System.out.println("f a : E1 − "+eb.getClass().getName()) ;
throw eb ;
} catch (ExC ec ) {
System.out.println("fa:E2−" +ec.getClass().getName()) ;
} finally{
System.out.println("fa:F") ;
}
}
Beim ersten Fall ist mir jetzt unklar wie ich die Exceptions finde. Im 2. Fall habe ich ja den Try-catch Block. Aber dann müssten meine Exceptions doch ExC ec und ExA eb und ExB ea usw. sein oder?
Aber das sind doch keine richtigen Exceptions wie ich sie kenne? normal is noch Nullpointer Exception oder sowas.
Von deinem geposteten Code bekommt man kopfweh. Bitte rücke vernünftig ein. Da oben blickt ja keiner mehr durch. Und wieso sollten das keine richtigen Exceptions sein?
Vllt liegts daran, dass ich noch keinen Mittag hatte, aber ich verstehe immernoch nicht wirklich, wo du Probleme hast.
throw Math.random() < 0.5? new ExB(Math.random() <0.5? 1:2):new ExA();
Wenn du eine Exception wirfst (throw) dann "fliegt" sie so lange nach oben durch deine Methoden bis sie in einem Catch Block landet, oder in der Main landet. Im fall das sie nicht gefangen wird...
In deinem konkreten fall :
Java:
throw Math.random() < 0.5? new ExB(Math.random() <0.5? 1:2):new ExA();
// ist gleich
if(Math.random() < 0.5) {
if( Math.random() <0.5 ) {
throw new ExB(1);
}
else {
throw new ExB(2);
}
}
else {
throw new ExA();
}
Pass aber auf, ExA und ExB sind RuntimeExceptions, das heißt müssen nicht abgefangen werden, plumpsen also auch locker mal durch, wenn Du nicht extra ein try/catch anlegst. ExC wiederum ist ein Throwable, das mußt Du bei der Programmierung abfangen. Ansonsten sieht das alles ein wenig verwirrend aus... Wieso gibt es den Mix und warum werden an allen Ecken und Enden Exception geworfen?
Also "Exception" bedeutet "Ausnahme". D.h. es passiert etwas , was eigentlich nicht Passieren sollte. Zum Beispiel findet der FileReader die zu lesende Datei nicht. Deshalb wirft ( Mnemonic : throws ) die FileReader klasse die FileNotFound exception. Diese fängt ( Mnemonic : catch ) man dann üblicherweise um den Fehler zu Verarbeiten.
Und wenn du deine Exception gar nicht behandelst...wirds dir sowieso in der Konsole angezeigt, falls dein Programm wirklich eine Exception werden sollte. Ansonsten schauste mal am besten in der Java API nach da stehen eigentlich alle drinne: Exception (Java Platform SE 6)