Java Exceptions

Sponny

Lt. Commander
Registriert
März 2008
Beiträge
1.046
Hallo liebe Community,

ich habe eine kleine Frage zu den Exceptions.

Fall 1:

Code:
	public Thing(int size, int y) throws IllegalStateException{
		
		if(exist){
			throw new IllegalStateException("java.lang.IllegalStateException: Only one object allowed!");
		}
	...
	}

Code:
 private static void failDoubleThing() {
		try {
			new Thing(5, 4);
			new Thing(5, 4);
		} catch (IllegalArgumentException ex) {
			System.err.println(ex.getMessage());
		}
	}


Ausgabe:
Exception in thread "main" java.lang.IllegalStateException: java.lang.IllegalStateException: Only one object allowed!
at ThingSys.Thing.<init>(Thing.java:12)
at ThingSys.Main.failDoubleThing(Main.java:212)
at ThingSys.Main.main(Main.java:39)


Fall 2:

Code:
private static void success() {

		try {
			
			new Thing(5, 4);
			new Thing(5, 4);

		} catch (IllegalArgumentException ex) {
			System.err.println(ex.getMessage());
		}

	}

Ausgabe:
java.lang.IllegalStateException: Only one object allowed!

Zu meiner Frage:

Ich versteh nicht ganz, wieso der Text der mir aufgrund der Exception, auf der Konsole angezeigt wird. Beim 2. Fall anders ist. Ich hätte gerne das der Text immer so ausführlich wie im Fall 1, ausgegeben wird. Weiß jemand woran das liegt? (Für beide Funktionen wird auch der gleiche Konstruktor aufgerufen.)

Vielen Dank im Voraus.
 
Zuletzt bearbeitet:
Sicher, dass " Only one object of allowed!" im 1. Beispiel ausgegeben wird? Wenn ja kommt die Fehlermeldung von wo anders her. (man beachte das "of")
 
rg88 schrieb:
Sicher, dass " Only one object of allowed!" im 1. Beispiel ausgegeben wird? Wenn ja kommt die Fehlermeldung von wo anders her. (man beachte das "of")

ja es kommt der von mir gerade editierte text. (siehe oben) habe während des postens noch am code gebastelt. das *of* kann daher ausser acht gelassen werden.

der konstruktor besitzt nur eine exception, die im catch block gefangen wird.
 
Zuletzt bearbeitet:
Wo werden die beiden Funktionen aufgerufen? Sind da vielleicht Threads im Spiel?
ex.printStackTrace() kennst du?
 
Ersteres ist der Stacktrace und zeigt die Hierarchie an, weil die Exception nicht gefangen wird (IllegalStateException ungleich IllegalArgumentException). Somit fängt die Methode failDoubleThing() nicht die Exception!
Beim zweiten Fall fängst du die Exception und gibt eine Meldung aus. Wenn du im zweiten Fall auch alles haben möchtest, dann musst du den Stacktrace ausgeben.
 
perfekt, danke für den tipp.
 
Ich empfehle dir die Verwendung eines Logging Framework wie z. B. log4j.
 
Zurück
Oben