Anweisungen in Java
Wir haben jetzt Aufrufanweisungen kennengelernt und hatten davor auch schon Ausgabeanweisungen kennengelernt.
Beides sind Spezialfälle einer allgemeinen syntaktischen Kategorie, der Anweisung.
Syntax von Anweisungen
Wir kennen zum jetzigen Zeitpunkt zwei Arten von Anweisungen:
- Ausgabeanweisungen (mit »java.lang.System.out.println« oder »java.lang.System.out.print«) und
- Aufrufanweisung (mit einem Aufruf und einem folgenden Semikolon).
Ausgabeanweisungen und Aufrufanweisungen sind Anweisungen.
- Anweisungen
Anweisung
|
.-----------'-----------.
| |
Ausgabeanweisung Aufrufanweisung
Leeraum in und um Anweisungen
Anweisungen bestehen, wie Ausdrücke, aus lexikalischen Einheiten. Zwischen diese lexikalischen Einheiten kann oder muß Leerraum nach denselben Regeln wie schon bei Ausdrücken behandelt, eingefügt werden. Daher kann in der Regel vor oder hinter einer Anweisung Leerraum eingefügt oder gelöscht werden, ohne daß dies die Bedeutung eines Programmes verändert.
Semantik von Anweisungen
Wir erinnern zunächst an die Situation bei Ausdrücken: Die Semantik einer Ausdrucks ist durch seinen Typ und das Verhalten einer Auswertung des Ausdrucks definiert. Für jede Art von Ausdruck ist festgelegt, was es bedeutet, ihn auszuwerten.
Die Semantik einer Anweisung ist durch die Wirkung einer Ausführung der Anweisung definiert.
Im Gegensatz zu einem Ausdruck hat eine Anweisung also keinen Wert.
Für jede Art von Anweisung ist festgelegt, was es bedeutet, sie auszuführen.
Anweisungen und Ausdrücke sind Programme (im weiteren Sinne des Wortes). Der Computer kann sie ausführen. Die Ausführung eines Ausdrucks nennt man allerdings Auswertung des Ausdrucks.
Die Ausführung eines Ausdrucks nennt man Auswertung des Ausdrucks (von „Ermittlung des Wertes des Ausdruck“).
Die Ausführung einer Anweisung nennt man auch so: Ausführung der Anweisung.
Aufrufanweisungen
Wir können die Aufrufanweisung nun etwas allgemeiner einordnen:
Das Semikolon erlaubt es, einen Aufruf als Anweisung zu schreiben.
Da eine Anweisung aber – im Gegensatz zu einem Ausdruck – keinen Wert haben kann, ist es ganz natürlich, daß der Wert des Ausdrucks dabei verloren geht.
Anweisungsfolgen
Ein Anweisung kann vor, hinter oder an Stelle einer anderen Anweisung in die bisher vorgestellten Programme eingesetzt werden.
Regel Vor oder hinter eine Anweisung darf in unserem Programm eine andere Anweisung eingefügt werden, und es entsteht so wieder ein korrektes Programm.
Regel Eine Anweisung darf in unserem Programm gelöscht werden, und es entsteht so wieder ein korrektes Programm.
Bei einer Folge von Anweisungen werden die Anweisungen in der gegebenen Reihenfolge hintereinander ausgeführt und ihre etwaigen Wirkungen treten in derselben Reihenfolge ein.
Übertragung von Informationen ⃗
Übertragung von Informationen durch Werte ⃗
Von einer Operation können durch einen Wert Informationen zu einer Methode oder einem Operator übertragen werden.
Im folgenden Programm wird eine Information von der Methode »java.lang.Math.random()« an die Methode »java.lang.Math.rint(double)« übertragen, indem der von der Methode »java.lang.Math.random()« zurückgegebene Wert als Argumentwert für den Aufruf der Methode »java.lang.Math.rint« verwendet wird.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( java.lang.Math.rint( java.lang.Math.random() )); }}- Protokoll
1.0
Übertragung von Informationen durch Wirkungen ⃗
Bei der Übertragung einer Information durch eine Wirkung, hinterläßt eine Operation die Welt in einem Zustand, der jene Information enthält. Die nächste Operation kann dann durch den Zustand der Welt beeinflußt werden und so jene Information verwenden.
Im folgenden Programm schreibt die Operation »java.lang.System.setProperty( "user.country", "US" )« beispielsweise den Wert »"US"« unter dem Namen »"user.country"« in die Umgebung.
Dieser Information wird dann von der Operator »java.lang.System.getProperty( "user.country" )« wieder ausgelesen und schließlich von der Ausgabeanweisung ausgegeben. So entsteht die Ausgabe »US« des Programmes.
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
Übungsfragen
? Texte klassifizieren
(Man beachte die untenstehende Gedächtnisstütze zu dieser Übungsfrage!)
Geben Sie zu den folgenden Texten jeweils an, ob sie eine Anweisung, ein Ausdruck oder keines von beidem sind.
- »java.lang.System.setProperty«
- »java.lang.System.setProperty( "user.country", "US" )«
- »java.lang.System.setProperty( "user.country", "US" );«
Gedächtnisstützen für diese Übungsfrage:
1. Zu Anweisungen:
Wir kennen zum jetzigen Zeitpunkt zwei Arten von Anweisungen:
- Ausgabeanweisungen (mit »java.lang.System.out.println« oder »java.lang.System.out.print«) und
- Aufrufanweisung (mit einem Aufruf und einem folgenden Semikolon).
2. Zu Ausdrücken:
Wir kennen zum jetzigen Zeitpunkt folgende Arten von Ausdrücken und ihren Bestandteilen:
- Syntax von Ausdrücken und ihrer Bestandteile
Name
.-----------------------.
| .------. .-. v .------------.
---'--->| Name |-->( . )---'--->| Bezeichner |--->
'------' '-' '------------'Ausdruckliste
.---------------------------.
| .----------. v
---'---.--->| Ausdruck |---.---'--->
^ '----------' |
| .-. |
'-------( , )<------'
'-'Aufruf
.-------. .-. .---------------. .-.
--->| Name |--->( ( )--->| Ausdruckliste |--->( ) )--->
'-------' '-' '---------------' '-'Primaerausdruck
.-. .----------. .-.
--->.--->( ( )--->| Ausdruck |--->( ) )--->.--->
| '-' '----------' '-' ^
| .----------. |
'------------>| Literal |-------------'
| '----------' |
| .----------. |
'------------>| Aufruf |-------------'
'----------'Postfixausdruck
.-----------------.
--->.--->| Primaerausdruck |---.--->
| '-----------------' ^
| .-----------------. |
'--->| Name |---'
'-----------------'Vorzeichenausdruck
.--------------------.
---.------------>| Postfixausdruck |----.---->
| '--------------------' ^
| .-. .--------------------. |
'--->( - )--->| Vorzeichenausdruck |----'
| '-' '--------------------' |
| .-. .--------------------. |
'--->( + )--->| Vorzeichenausdruck |----'
'-' '--------------------'Multiplikativausdruck
.-----------------------.
---.--->| Vorzeichenausdruck |--------------------------------------.--->
| '-----------------------' ^
| .-----------------------. .-. .--------------------. |
'--->| Multiplikativausdruck |--->( * )--->| Vorzeichenausdruck |---'
| '-----------------------' '-' '--------------------' |
| .-----------------------. .-. .--------------------. |
'--->| Multiplikativausdruck |--->( / )--->| Vorzeichenausdruck |---'
'-----------------------' '-' '--------------------'Additivausdruck
.-----------------------.
---.--->| Multiplikativausdruck |-----------------------------------------.--->
| '-----------------------' ^
| .-----------------------. .-. .-----------------------. |
'--->| Additivausdruck |--->( + )--->| Multiplikativausdruck |---'
| '-----------------------' '-' '-----------------------' |
| .-----------------------. .-. .-----------------------. |
'--->| Additivausdruck |--->( - )--->| Multiplikativausdruck |---'
'-----------------------' '-' '-----------------------'Ausdruck
.-----------------.
--->| Additivausdruck |--->
'-----------------'- Zusätzliche Anforderungen an Namen in Ausdrücken (läßt sich nicht den Syntaxdiagrammen entnehmen)
- Wenn ein Name als Ausdruck verwendet werden soll, so muß dies ein Name einer Variablen sein. Der Name einer Methode, einer Klasse, eines Paketes oder eines Moduls ist kein Ausdruck.
- Wenn ein Name am Anfang eines Aufrufs verwendet werden soll, so muß dies der Name einer Methode sein.
? Anweisungen
Geben Sie zu den folgenden Texten jeweils an, ob sie eine Anweisung sind.
- »2;«
- »2 + 3;«
- »java.lang.Math.random();«
- »java.lang.Math.cos( 0 );«
- Dokumentation von »java.lang.Math.random()« (gekürzt und übersetzt)
java.lang
Klasse Math
static double random()
Ergibt einen double-Wert groesser oder gleich 0.0 und kleiner als 1.0.- Die Dokumentation von »java.lang.Math.cos« (vereinfacht)
java.lang
Class Math
static double cos( double x )
Ergibt den Kosinus von x.
Gedächtnisstütze für diese Übungsfrage:
Wir kennen zum jetzigen Zeitpunkt zwei Arten von Anweisungen:
- Ausgabeanweisungen (mit »java.lang.System.out.println« oder »java.lang.System.out.print«) und
- Aufrufanweisung (mit einem Aufruf und einem folgenden Semikolon).
Übungsaufgaben
/ Übungsaufgabe
Schreiben Sie ein Programm mit einer Ausgabeanweisung, das eine Zufallszahl ausgibt.
Das Programm soll nichts Überflüssiges enthalten.
/ Übungsaufgabe
Schreiben Sie ein Programm mit einer Aufrufanweisung, das die Methode »java.lang.Math.random()« aufruft.
Das Programm soll nichts Überflüssiges enthalten.
/ Übungsaufgabe ⃗
Schreiben Sie ein Programm, das gar keine Anweisung mehr enthält, aber trotzdem fehlerfrei übersetzt werden kann.