Unterschied throw und throws

Hallo zusammen

Kann mir jemand den Unterschied zwischen throw und throws nennen. Ich habe bisher nichts gescheites dazu gefunden.

Ist es möglich, dass throws in der Methodendeklaration steht und angibt, dass die Methode eine Exception werfen kann:

public void objektSuche() throws exception

throw hingegen einer methode eine konkrete exception auswirft:

if (i>0; throw Exception:wink:

wäre das so etwa richtig?
Muss folglich bei der Angabe von throw immer vorgängig in der Methodensignatur das throws Statement erwähnt sein?

Merci und herzliche Grüsse
Bruno

Hallo,

wäre das so etwa richtig?

So ist es.

Muss folglich bei der Angabe von throw immer vorgängig in der
Methodensignatur das throws Statement erwähnt sein?

Genau, sonst gibt es einen Compilierfehler.

Gruß
Torsten

Hallo Bruno,

wäre das so etwa richtig?

Stimmt - mit throws deklariert man, dass eine Methode einen Fehler werfen kann, mit throw wirft man ihn.

Muss folglich bei der Angabe von throw immer vorgängig in der
Methodensignatur das throws Statement erwähnt sein?

Nein, das ist nicht immer nötig - es gibt zwei Arten von Fehlern.
Checked Errors muss man vorher deklarieren - das sind z.B. IOException, FileNotFoundException, etc.
Unchecked Errors kann man werfen, wann immer man will, ohne sie zu deklarieren - das sind z.B. Error, RunTimeException, IllegalArgumentException etc.
Der große Unterschied ist, ob die Fehler erwartet sind oder nicht - einen FileNotFound Error wirst du wahrscheinlich erwarten und dementsprechend auch behandeln müssen, weil du dich nicht 100%ig darauf verlassen kannst, ob die Datei da sein wird. Dann musst du die Methode mit Throws FileNotFoundException markieren, und dann kannst du den Fehler mit Try…Catch behandeln.
Ein einfacher „Error“ oder eine RunTimeException wird aber wahrscheinlich nur dann auftreten, wenn etwas furchtbar schief gegangen ist, und das etwas ist, was du nicht erwarten kannst bzw. erwartet hast, wenn z.B. die Argumente einer Methode falsch sind. Oder wenn in einem Programm ein Zähler zu weit inkrementiert wurde.

Also: Nein, du brauchst nicht alle Fehler zu deklarieren, aber im Zweifelsfall tu es lieber. Such einfach mal nah der Java Exception Hierarchy.

Gruß

–WhiteAvenger