Die Einschränkungen der Rückgabeanweisung in Java
Die Einschränkungen der Rückgabeanweisung sind die Anforderungen, welche die Programmiersprache zusätzlich zur Verwendung der korrekten Syntax an eine Rückgabeanweisung stellt.
Typanforderungen
Wenn eine Methode eine andere Rückgabespezifikation als »void« hat, dann muß die Ausführung der Methode mit der Ausführung einer Rückgabeanweisung enden, deren Ausdruck einen Typ besitzt, der ein Untertyp des Rückgabetyps ist.
Umgekehrt darf eine Rückgabeanweisung mit einem Ausdruck nur in einer Methode verwendet werden, deren Rückgabespezifikation nicht »void« lautet.
- Rückgabetyp und return-Ausdruck
Rückgabespezifikation Typ des return-Ausdrucks
double double, long, int
long long, int
int int
java.lang.String java.lang.String
void (entfaellt)
In der folgenden Methodendeklaration hat der return-Ausdruck den Typ »int«, während der Rückgabetyp gleich »double« ist. Diese Kombination ist nach der Tabelle erlaubt. Der Wert »7« vom Typ »int« wird spätestens bei einer Ausführung der Methode in den Typ »double« gewandelt.
Main.java
public final class Main
{public static double f(){ return 7; }
public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( f() ); }}java.lang.System.out
7.0
Die allgemeine Substitutionsregel
ℛ Substitutionsregel Wird ein Ausdruck eines Typs (wie beispielsweise »double«) erwartet, so kann ein Ausdruck eines Untertyps (wie beispielsweise »int«) angegeben werden.
Allgemein muß beim Kopieren eines Wertes der Typ des Ausdrucks, der den Wert angibt, eine Untertyp des Typs des Ausdrucks, der das Ziel des Kopierens angibt, sein. Als Spezialfälle dieser Regel ergeben sich:
- Der Typ eines Initialisierungsausdrucks in einer Variablendeklaration muß ein Untertyp des Typs der Variablen sein.
- Der Typ der rechten Seite einer Zuweisung muß ein Untertyp des Typs der linken Seite der Zuweisung sein. (Der Typ eines Initialisierungsausdrucks in einer Variablendeklaration muß daher auch ein Untertyp des Typs der Variablen sein.)
- Der Typ eines Argumentausdrucks muß ein Untertyp des Parametertyps sein.
- Der Typ eines Rückgabeausdrucks (in einer return-Anweisung) muß ein Untertyp des zugehörigen Rückgabetyps sein.
Übungsfragen
? Übungsfrage
Welche der folgenden Methodendeklarationen sind erlaubt?
- »public static double f(){ return 7; }« (Anton)
- »public static double f(){ return 7.0; }« (Berta)
- »public static int f(){ return 7 + 2; }« (Cäsar)
- »public static int f(){ return 7.0; }« (Dora)
- »public static void f(){ return 7; }« (Emil)
- »public static int f(){ return "7"; }« (Friedrich)
- »public static double f(){ return "7"; }« (Gustav) →
- »public static java.lang.String f(){ return "7"; }« (Heinrich) →
- »public static java.lang.String f(){ return 7; }« (Julius) →
- »public static java.lang.String f(){ return 7.0; }« (Konrad) →
- »public static double f(){ return -"7"; }« (Ludwig) →
- »public static int f(){ return 7 + 7.0; }« (Nordpol) →
? Übungsfrage
Welcher Rückgabetyp kann jeweils an Stelle der Lücke eingesetzt werden? (Es könnte für eine bestimmte Lücke auch mehrere richtige Antworten geben,)
- »public static __________ f(){ return "7"; }« (Anton)
- »public static __________ f(){ return 7; }« (Berta)
- »public static __________ f(){ return 7.0; }« (Cäsar)
- »public static __________ f(){ return 7 + 7.0; }« (Emil) →
- »public static __________ f(){ return 7.0 + "7"; }« (Friedrich) →
- »public static __________ f(){ return java.lang.Math.random(); }« (Gustav) →
- »public static __________ f(){ return f(); }« (Heinrich) →