Abhängigkeiten des Verhaltens in Java
In dieser Lektion zeigen wir, wovon das Verhalten einer Auswertung in Java abhängen kann. Wir hatte ein ähnliches Thema schon einmal in einer früheren Lektion behandelt, aber damals die Abhängigkeit des Wertes betrachtet, während wir in dieser Lektion hier nun statt dessen den umfassenderen Begriff des Verhaltens verwenden. Daher ist diese Lektion teilweise eine Wiederholung.
Beispiel Abhängigkeit nur von Argumentwerten
Das folgende Beispiel zeigt, daß das Verhalten der Auswertung eines Aufrufs von »java.lang.Math.abs« nur vom Wert des Argumentausdrucks abhängt (aber nicht von der Umgebung).
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( java.lang.Math.abs( 3 ));
java.lang.System.out.println( java.lang.Math.abs( 4 ));
java.lang.System.out.println( java.lang.Math.abs( 3 )); }}java.lang.System.out
3
4
3
Um sicher zu sein, daß das Verhalten der Methode »java.lang.Math.abs« nur vom Argumentwert abhängt, muß man die Dokumentation der Methode lesen. (Es ist nicht möglich, dies durch Ausprobieren festzustellen.)
- Dokumentation von »java.lang.Math.abs« (vereinfacht)
java.lang
Klasse Math
static double abs( double x )
Ergibt den Betrag von x.
Beispiel Abhängigkeit nur von Laufzeitumgebung
Das folgende Beispiel zeigt, daß das Verhalten der Auswertung eines Aufrufs von »java.lang.Thread.dumpStack« nur von der Umgebung abhängt.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.Thread.dumpStack();
java.lang.Thread.dumpStack(); }}java.lang.System.out
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1342)
at Main.main(Main.java:3)java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1342)
at Main.main(Main.java:4)
In dem obigen Programm werden die Werte einer Operation ausgegeben: »java.lang.Thread.dumpStack()«. Da diese Operation jedoch in zwei verschiedenen Laufzeitumgebungen aktiviert wird, ergeben sich aus zwei verschiedene Ausgaben.
Auch die Methode »java.lang.Math.random()« muß eine Form von Messung der Laufzeitumgebung vornehmen, denn sonst wäre es nicht zu erklären, wie bei der Auswertung desselben Ausdrucks »java.lang.Math.random()« verschiedene Werte herauskommen können.
Beispiel Abhängigkeit von Argumentwerten und Laufzeitumgebung
Das folgende Beispiel soll die doppelte Abhängigkeit des Verhaltens (hier: des Werts) von den Argumentwerten und der Laufzeitumgebung verdeutlichen:
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{/* A */
java.lang.System.setProperty( "x", "0" );
java.lang.System.setProperty( "y", "1" );
java.lang.System.out.println( java.lang.System.getProperty( "x" ));
java.lang.System.out.println( java.lang.System.getProperty( "y" ));/* B */
java.lang.System.setProperty( "x", "2" );
java.lang.System.setProperty( "y", "3" );
java.lang.System.out.println( java.lang.System.getProperty( "x" ));
java.lang.System.out.println( java.lang.System.getProperty( "y" )); }}java.lang.System.out
0
1
2
3- Aussprachehinweis
- property ˈprɑp ɚ ti
In dem obigen Programm werden die Werte zweier Operationen ausgegeben: »java.lang.System.getProperty( "x" )« und »java.lang.System.getProperty( "y" )«.
Da dies in zwei verschiedene Laufzeitumgebung geschieht, ergeben sich insgesamt vier Möglichkeiten.
Zuerst wird durch das Argument (»"x"« oder »"y"«) eine Operation (Inkarnation) festgelegt, dann durch diese Operation der Wert dieser Operation. Bei der Findung dieses Wertes, kann die Operation dann ihre Umgebung berücksichtigen.
- Abhängigkeiten des Wertes der Methode »java.lang.System.getProperty(java.lang.String)«
A B <- Laufzeitumgebung"x" 0 2
"y" 1 3
^
|
Argumentwert
⚠ In dieser Lektion wurden die Methode »java.lang.System.setProperty« und »java.lang.System.getProperty« zur Erklärung des wichtigen Abhängigkeitsbegriffs als Beispiele herangezogen. In der Praxis spielen diese Methoden jedoch nur eine untergeordnete Rolle. Daher ist die Verwendung dieser Methoden in dieser Lektion nicht als Empfehlung zu verstehen, diese Methoden zur Speicherung von Informationen zu verwenden. Dafür gibt es in Java meist bessere Möglichkeiten, die später vorgestellt werden werden.
Übungsfragen
? Ausdrücke
Geben Sie zu den folgenden Ausdrücken jeweils an, ob das Verhalten ihrer Auswertung von den Argumenten oder von der Umgebung abhängt (oder von beidem).
- »java.lang.Math.cos( 0 )«
- »java.lang.System.currentTimeMillis()«
- »java.lang.Math.random()«
- Die Dokumentation von »java.lang.Math.cos« (vereinfacht)
java.lang
Class Math
static double cos( double x )
Ergibt den Kosinus von x.- Dokumentation von »java.lang.System.currentTimeMillis« (vereinfacht)
Paket java.lang
Klasse System
static int currentTimeMillis()
Ergibt die Millisekunden seit dem 1. Januar 1970.- Dokumentation von »java.lang.Math.random()« (gekürzt)
java.lang
Class Math
Method Summary
static double random()
Ergibt einen double-Wert groesser oder gleich 0.0 und kleiner als 1.0,
der bei jedem Aufruf anders sein kann.
? Zeilen
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.Thread.dumpStack();
java.lang.Thread.dumpStack(); }}- Konsole
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Unknown Source)
at Main.main(Main.java:3)java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Unknown Source)
at Main.main(Main.java:4)
Das obenstehende Programm gibt sechs Zeilen aus. Wie viele Zeilen gibt das folgende Programm aus?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.Thread.dumpStack(); /* Zeile 3 *
java.lang.Thread.dumpStack(); * Zeile 4 */ }}