# throws Klausel



## dt2158 (17. Mai 2005)

Die throws-Klausel im Interface

```
interface Inter {

   public void methode() throws BoeseException;

}
```

ist
Antwort:  	


a. erforderlich, sonst darf die Implementierung von methode() keine Ausnehme auswerfen.
b. korrekt: Die throws-Klausel gehört zur Methodensignatur
c. unzulässig: throws gehört nur zur Implemeniterung, nicht in die Spezifikation.

Was ist richtig???

Ich schwanke zwischen b oder c, weil laut dem mir vorliegenden widersprüchlichen Skript, gilt das "Die throws-Klausel gehört zur Signatur" also b; gleichzeitig dacht ich das ein interface eine "Spezifikation" ist und keine Implementierung und daher c auch richtig wär???

Und - nur eins kann richtig sein!!!


----------



## Sky (17. Mai 2005)

Zu c) Wenn die throws-Klausel nicht im Interface defeniert wird, so kann sie auch in der implementierten Klasse nicht definiert werden (-> Compiler-Fehler)


----------



## stev.glasow (17. Mai 2005)

Wenn nur eine Antwort zulässig ist a, sonst a und b, da a b einschließt, würde ich sagen. Aber a ist auf jeden Fall richtig, die Implementierung  darf nur Exceptions werfen, die auch im Interface angegeben sind oder von diesen erben.


----------



## Sky (17. Mai 2005)

stevg hat gesagt.:
			
		

> Wenn nur eine Antwort zulässig ist a, sonst a und b, da a b einschließt, würde ich sagen. Aber a ist auf jeden Fall richtig, die Implementierung  darf nur Exceptions werfen, die auch im Interface angegeben sind oder von diesen erben.


... es sein denn die Exception ist von RuntimeException abgeleitet. Diese darf auch ohne throws-Klausel geworfen werden. Also tendiere ich eher zu b.


----------



## stev.glasow (17. Mai 2005)

Stimmt, dann bleibt nur b übrig. Aber irgendwie ist die Antwort trotzdem komisch oder nicht?


----------



## Illuvatar (17. Mai 2005)

Ich würd auch b sagen. Korrekt ist sie auf jeden Fall. Unzulässig ist sie nicht und erforderlich auch nicht, man kann sie ja weglassen.


----------



## Bleiglanz (18. Mai 2005)

a. erforderlich, sonst darf die Implementierung von methode() keine Ausnehme auswerfen.

bullshit-frage, das hängt davon ab, ob die Exception checked ist oder nicht

b. korrekt: Die throws-Klausel gehört zur Methodensignatur

das ist richtig, aber warum soll die "throws klausel korrekt" sein, weil sie zufällig "zur signatur gehört"? Gemeint ist wohl, dass man im Interface die geworfenen (checked) Exceptions schon deklarieren muss...

c. unzulässig: throws gehört nur zur Implemeniterung, nicht in die Spezifikation. 

die ist offensichtlich falsch

also bleibt nur b, weil a unsinnig ist und c falsch


----------



## stev.glasow (18. Mai 2005)

Ich wette nen 5ter dass das ne Frage aus der Suns Java Programmer Prüfung ist, da fragen die öfter so doof.


----------

