Typanforderungen einer Namensdeklaration in Java
Wiederholung von Regeln in Zusammenhang mit Typen
ℛ String-Regel Ein Zeichenfolgenliteral hat den Typ »java.lang.String«.
Das Substitutionsprinzip für Initialisierungsausdrücke
ℛ Substitutionsprinzip für Initialisierungsausdrücke Der Typ der zu initialisierenden Variablen muß ein Oberttyp des Typs des Initialisierungsausdrucks sein.
Das folgende Programm erfüllt beispielsweise das Substitutionsprinzip für Initialisierungsausdrücke.
Der Name »o« hat den Typ »java.lang.Object«. Der Namen »java.lang.System.out« hat den Typ »java.io.PrintStream«. Der Typ »java.lang.Object« ist ein Obertyp des Typs »java.io.PrintStream«.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.Object o = java.lang.System.out; }}- Protokoll
- (keine Ausgabe)
Das folgende Programm zeigt weitere Beispiele erlaubter Typen in einer Variablendeklaration.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.io.PrintStream out = java.lang.System.out;
{ final int a = 2; out.println( a ); }
{ final double a = 2; out.println( a ); }
{ final java.lang.String s = "abc"; out.println( s ); }
{ final java.lang.CharSequence s = "def"; out.println( s ); }
{ final java.lang.Object s = "ghi"; out.println( s ); } }}- Protokoll
2
2.0
abc
def
ghi
Faustregel für Variablentypen
ℛ Faustregel für Variablentypen Der Typ einer Variablen sollte im Zweifelsfall der Typ des Initialisierungsausdrucks sein.
Zur Umsetzung dieser Faustregel ist natürlich »var« hilfreich.
Beispielsweise hat der Name »o« im folgenden Programm den Typ »java.io.PrintStream«, und der Namen »java.lang.System.out« hat denselben Typ.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final var o = java.lang.System.out; }}- Protokoll
- (keine Ausgabe)
Hinweis für den Dozenten ► N: Introduce Name
Übungsfragen
? Übungsfrage
Ist die folgende Deklaration erlaubt?
- Quelltext
{ final java.lang.Object s = "abcdefg"; }
? Übungsfrage
Ist die folgende Deklaration erlaubt?
- Quelltext
{ final java.lang.String s = "abcdefg"; }
? Übungsfrage
Ist die folgende Deklaration erlaubt?
- Quelltext
{ final java.lang.CharSequence s = "abcdefg"; }
? Übungsfrage
Ist die folgende Deklaration erlaubt?
- Quelltext
{ final java.io.PrintStream s = "abcdefg"; }
? Übungsfrage
Was kann in den folgenden Block an der Stelle des Striches »__________« eingesetzt werden?
- Quelltext
{ final __________ s = "abcdefg"; }
? Übungsfrage
Was kann in den folgenden Block an der Stelle des Striches »__________« eingesetzt werden?
- Quelltext
{ final __________ s = java.lang.System.out; }
Übungsaufgaben
/ Versionsanalyse
(Diese Aufgabe setzt ein JDK ab dem JDK 9 voraus)
Schreiben Sie ein Programm, das die folgenden Dinge hintereinander erledigt.
- Ein Text mit einer Bezeichnung der verwendeten Java -Version wird durch Aufruf der Methode ›java.lang.System.getProperty‹ mit dem Argumentwert «"java.version"» ermittelt.
- Der erhaltene Versionstext wird ausgegeben.
- Die Funktion ›java.lang.Runtime.Version.parse‹ (erst ab JDK 9 vorhanden) wird mit dem erhaltenen Versionstext als Argument aufgerufen und der Wert dieses Aufrufs wird »version« genannt.
- Das erhaltene Objekt ›version‹ wird ausgegeben.
- Jede der vier parameterlosen Methoden ›feature‹, ›interim‹, ›update‹ und ›patch‹, die sich in dem Objekt ›version‹ befinden, wird aufgerufen und der Wert ihres Aufrufs wird jeweils ausgegeben.
/ Übungsaufgabe
Ersetzen Sie den Ausdruck »java.io.PrintStream« durch den Namen einer Variablen und deklarieren Sie dann die Variable am Anfang des Blocks mit dem Ausdruck »java.io.PrintStream« als Initialisierungsausdruck.
Verwenden Sie dabei den Typ des Initialisierungsausdrucks als Typ der Variablen.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( java.lang.System.out ); }}
/ Übungsaufgabe
Ersetzen Sie den Ausdruck »java.io.PrintStream« durch den Namen einer Variablen und deklarieren Sie dann die Variable am Anfang des Blocks mit dem Ausdruck »java.io.PrintStream« als Initialisierungsausdruck.
Verwenden Sie dabei als Typ der Variablen einen Typ, der möglichst weit oben in der Typhierarchie ist.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( java.lang.System.out ); }}