Was bewirkt ganz genau throw hinter einem Funktionsnamen?

Schuriko

Bekanntes Mitglied
Was bewirkt ganz genau throw hinter einem Funktionsnamen?

Konkretes Beispiel:
Ich habe einen Copy Constructor (es könnte auch jede andere x-beliebige Funktion sein)
Code:
        public Country(Country country) {
            super();
          
            this.name = country.name;
            this.iso = country.iso;
        }

Diesem Copy Constructor könnte man auch null übergeben. Dieses würde aber zu einer java.lang.NullPointerException führen, die von außen aufgefangen werden kann. Was konkret ist also der unterschied zwischen

void myfunc(Class class) {
...
}

und

void myfunc(Class class) throw Exception {
...
}
 
Moin,

der erste Aufruf fängt KEINE Exception ab - oder allenfalls im Code mit TRY-CATCH innerhalb der geschweiften Klammern!
Der zeite Aufruf fängt eine (allgemeine) Excperstion ab und gibt sie an die aufrufende Stelle zurück, wo sie dann entweder abgearbeitet wird oder wiederum an die aufrufende Stelle weitergereicht wird!

VG Klaus
 
Was konkret ist also der unterschied zwischen
throws Exception gibt an, dass diese Methode eine (Checked) Exception werfen kann.
Das führt dazu, dass du diese innerhalb der Methode werfen darfst, und beim Aufrufen der Methode beachten musst.

Bei einer NPE macht das keinen Unterschied, dies ist eine Runtime Exception (unchecked Exception), die du nicht explizit behandeln musst.

Der zeite Aufruf fängt eine (allgemeine) Excperstion ab
Ne, nur throws fängt nichts ab.
 
Zuletzt bearbeitet:
Danke euch beiden.

Also müsste das obige konkrete Beispiel korrekterweise wie folgt lauten:
Code:
public Country(Country country) throws java.lang.NullPointerException {
            super();
          
            this.name = country.name;
            this.iso = country.iso;
        }
 
Wie gesagt; NPEs und alle anderen RuntimeExceptions musst du nicht angeben, die das throws kannst du in dem Fall weg lassen.
Sinnvoll ist das dabei nur für Dokumentationszwecke.
 
Nein. Denn NPE ist eine unchecked exception.

Macht ja auch keinen Sinn. Statt Code zu schreiben, der einen null Pointer abfängt solltest Du einfach vor dem Aufruf auf null prüfen.
 
Noch ein Hinweis, damit hier keine Missverständnisse aufkommen: mit dem SCNR habe ich mir dafür entschuldigt, dass ich scherzhaft unsinnigen Code gepostet habe, der den Punkt von @kneitzel völlig überspitzt darstellt.
 

Zurück
Oben