Aufrufanweisungen in Java
Zuvor wurde schon ein Programm mit Ausdrücken behandelt, deren Auswertung eine Wirkung hat. Der Wert dieser Ausdrücke wurde dabei jeweils ausgegeben.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( java.lang.System.setProperty( "user.country", "US" ));
java.lang.System.out.println( java.lang.System.getProperty( "user.country" )); }}Protokoll
DE
US- Aussprachehinweis
- property ˈprɑp ɚ ti
Die Wirkung der Auswertung von »java.lang.System.setProperty( "user.country", "US" )« war die Veränderung eines Wertes zu »US« und der sich ergebende Wert war der vorige Wert »DE«,.
Manchmal fragt man sich, ob man »println« irgendwie „weglassen“ kann, wenn man »x« auf »4« setzen will, aber den Wert »DE« nicht ausgeben (sondern „verstecken“) will. Was ist also, wenn wir nur die Wirkung haben wollen, aber den Wert nicht verwenden wollen?
Wir haben einen Ausdruck bisher immer in die abstrakte Ausgabeanweisung eingesetzt, wenn wir ihn auswerten lassen wollten. Nun werden wir lernen, wie wir Ausdrücke auch auf andere Weise auswerten lassen können.
Aufrufanweisungen
Um die Wirkung einer Auswertung zu erhalten, ohne den Wert dabei gleichzeitig auszugeben kann man den Ausdruck mit einem Semikolon zu einer Aufrufanweisung verbinden.
Solch eine Aufrufanweisung verlangt, daß der Ausdruck ausgewertet wird, aber nicht, daß der erhaltene Wert dann auch ausgegeben wird.
In dem folgenden Beispielprogramm wird beispielsweise der Ausdruck »java.lang.System.setProperty( "user.country", "US" )« ausgewertet. Der Wert dieses Ausdrucks (»DE«) wird nicht ausgegeben, aber man kann an der Ausgabe der folgenden Ausgabeanweisung erkennen, daß die Wirkung der Auswertung des Ausdrucks »java.lang.System.setProperty( "user.country", "US" )« eingetreten ist.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.setProperty( "user.country", "US" );
java.lang.System.out.println( java.lang.System.getProperty( "user.country" )); }}transcript
US
Syntax
Syntax Eine Aufrufanweisung besteht aus einem Aufruf und einem diesem folgenden Semikolon.
- Aufrufanweisung (Syntaxdiagramm)
Anweisung
.--------. .-.
---->| Aufruf |---->( ; )---->
'--------' '-'
Das Semikolon der Aufrufanweisung ist eine lexikalische Einheit.
Ein Aufrufanweisung kann vor, hinter oder an Stelle einer Ausgabeanweisung in die bisher vorgestellten Programme eingesetzt werden.
Beispiel »java.lang.System.setProperty( "user.country", "US" );« ist eine Aufrufanweisung.
- Zerlegung einer Aufrufanweisung
java.lang.System.setProperty( "user.country", "US" ) ;
'------------------------------------------------------------' '-----------'
Aufruf Semikolon| |
'----------------------------------------------------------------------------------'
Aufrufanweisung
Typregeln
An den Datentyp des Aufrufs werden keine Anforderungen gestellt – jeder Typ ist erlaubt.
Ausführung
Bei der Ausführung einer Aufrufanweisung wird ihr Aufrufausdruck ausgewertet.
Bei der Auswertung des Aufrufs einer Aufrufanweisung treten dann die Wirkungen dieser Auswertung ein. Ein sich dabei eventuell ergebender Wert wird allerdings nicht weiter verwendet (er geht verloren). Beispielsweise ergibt die Auswertung des Aufrufs »java.lang.System.setProperty( "user.country", "US" )« in der Aufrufanweisung »java.lang.System.setProperty( "user.country", "US" );« zwar den Wert »DE«, aber dieser Wert wird nun nicht mehr ausgegeben (wie in dem ersten Programm dieser Lektion), sondern er geht verloren.
Der Aufruf von Methoden, die einen Wert liefern, aber keine Wirkung haben, ist in einer Aufrufanweisung wirkungslos.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.Math.random();
java.lang.Math.cos( 0 ); }}java.lang.System.out
- (keine Ausgabe)
In dem obigen Programm wird ein Wert von der Methode »java.lang.Math.random()« zurückgegeben, aber dieser wird nicht ausgegeben.
Wir sagen daher auch, daß wir den Wert eines Ausdrucks verwerfen (also ihn nicht verwenden), wenn wir ihn als Aufruf in einer Aufrufanweisung verwenden.
Die Aufrufanweisung verwendet den Wert nicht. Man verwendet sie also, wenn man einen Ausdruck nur wegen der Wirkung der Auswertung auswerten will.
Die Aufrufanweisung wird verwendet, wenn die Wirkung eines Aufrufs eintreten und der Wert ignoriert werden soll.
Übungsfragen ⃗
? Erkennen von Anweisungsarten ⃗
Sagen Sie zu jeder der folgenden Anweisungen, ob es sich um eine Ausgabeanweisung oder um eine Aufrufanweisung handelt!
- »java.lang.Math.random();« Anton
- »java.lang.Math.cos( 0 );« Berta
- »java.lang.System.setProperty( "user.country", "US" );« Cäsar
- »java.lang.System.out.println( java.lang.System.getProperty( "user.country" ));« Dora
Faustregel Eine Ausgabeanweisung erkennt man am »print« oder »println« vor der ersten Klammer.
? Lexikalische Einheiten zählen ⃗
Wie viele lexikalische Einheiten enthält die Aufrufanweisung »java.lang.Math.random();«?
Übungsaufgaben ⃗
/ Übungsaufgabe ⃗
Schreiben Sie eine Inkarnation der Kategorie »Aufrufanweisung« des folgenden Syntaxdiagramms mit dem Aufruf »java.lang.Thread.yield()«.
- Aufrufanweisung (Syntaxdiagramm)
Aufrufanweisung
.--------. .-.
---->| Aufruf |---->( ; )---->
'--------' '-'
Die Lösung soll auf einer von Leerzeilen umgebenden Zeile für sich stehen.