Aufrufwerte in Java
Aufrufsyntax
Es folgt eine vereinfachte Variante der Aufrufsyntax von Java (“method invocation ” bedeutet „Methodenaufruf“).
- 〈MethodInvocation 〉 ::=
- 〈MethodName 〉 "(" ")".
Diese Syntax gibt im wesentlichen an, daß ein Methodenaufruf aus einem Methodennamen gebildet werden kann, auf den eine öffnende und eine schließende runde Klammer folgt.
In Java ist ein Methodenname aufrufbar. Obwohl ein Methodenname in Java kein Ausdruck ist, der die benannte Methode als Wert hat, sagt man doch oft, daß man eine Methode aufrufe (und nicht etwa den Namen der Methode). Ein Methodenaufruf kann aus einem Methodennamen und einem paar runder Klammern bestehen. Ein Beispiel für einen Methodenaufruf wird nun anhand der Methode "java.lang.Math.random" vorgestellt.
java.lang.Math.random()
In dem als Beispiel gewählten Methodenaufruf "java.lang.Math.random()" ist der Quelltext "java.lang.Math.random" also ein 〈MethodName 〉. (Der 〈MethodName 〉 hat in diesem Fall die Struktur 〈TypeName 〉 "." 〈Identifier 〉, wobei der Quelltext "java.lang.Math" der 〈TypeName 〉 ist und der Quelltext "random" der 〈Identifier 〉 ist.)
Der Methodenaufruf "java.lang.Math.random()" hat einen Wert vom Datentyp "double". Dieser Wert ist eine im Rahmen des Aufrufs ermittelte Pseudozufallszahl ist. Das wird auch in dem folgenden Kompaßdiagramm dargestellt.
java.lang.Math.random [Kompassdiagramm]
.-----------------------.
| java.lang.Math.random | double
| |------------------->
| | Pseudozufallszahl
'-----------------------'
In dem folgenden Beispiel wird die Methode "java.lang.Math.random" aufgerufen. Der Quelltext "java.lang.Math.random" ist ein Methodenname. Der Wert dieses Aufrufs ist eine Pseudozufallszahl, die größergleich 0.0 und kleiner als 1.0 ist.
Pseudozufall.java
public class Pseudozufall
{ public static void main( String[] args )
{ System.out.println( java.lang.Math.random() ); }}System.out
0.3977174048298153
Man spricht beim Aufruf der Methode "java.lang.Math.random()" auch davon, daß man der Klasse ""java.lang.Math" die Nachricht "random()" schicke und sieht dabei eine Klasse als eine Entität an, mit der eine Kommunikation durch Nachrichten erfolgt. Obwohl das eine etwas irritierende Vorstellung ist, kann mit „Versand einer Nachricht“ eine Kommunikation in beide Richtungen gemeint sein, weil man dazu auch die „Antwort“ auf die Nachricht zählt, also beispielsweise die sich durch den Aufruf ergebende Pseudozufallszahl.
[UML collaboration diagram]
|
| |
| | random()
| |
| V
|
.--------------------------------------.
| |
| java.lang.Math |
| -------------- |
| |
'--------------------------------------'
Wenn der Aufrufoperator weggelassen wird, dann handelt es sich nicht mehr um einen korrekten Aufruf.
Pseudozufall1.java
public class Pseudozufall1
{ public static void main( String[] args )
{ System.out.println( java.lang.Math.random ); }}Konsole
Pseudozufall.java:3: cannot resolve symbol
symbol : variable random
location: class java.lang.Math
{ System.out.println( java.lang.Math.random ); }}
^
1 error
Namen von Methoden gelten in Java nicht als Ausdrücke, was man daran erkennen kann, daß man sie in einem Aufruf auch nicht einklammern kann. (In einigen anderen Sprachen ist das möglich, weil dort die Namen selber Ausdrücke darstellen und ein Ausdruck kann immer eingeklammert werden, ohne daß sich dadurch etwas ändert.) In dem folgenden Beispiel wird der Aufrufoperator wieder verwendet, doch der Name der aufgerufenen Methode wurde eingeklammert.
Pseudozufall2.java
public class Pseudozufall2
{ public static void main( String[] args )
{ System.out.println(( java.lang.Math.random )() ); }}Konsole
Pseudozufall.java:3: illegal start of expression
{ System.out.println(( java.lang.Math.random )() ); }}
^
Pseudozufall.java:3: ')' expected
{ System.out.println(( java.lang.Math.random )() ); }}
^
Pseudozufall.java:3: cannot resolve symbol
symbol : class random
location: class java.lang.Math
{ System.out.println(( java.lang.Math.random )() ); }}
^
3 errors