Deklaration und Verwendung von Konstanten (Deklaration und Verwendung von Konstanten), Lektion, Seite 723223
https://www.purl.org/stefan_ram/pub/konstantendeklaration_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Festlegung und Verwendung von Namen in Java 

Erinnerung an Namen

Wir hatten vordefinierte  Namen für Werte schon kennengelernt:

In dieser Lektion geht es nun darum, wie in einem Programm neue  Namen für einen Wert festgelegt werden.

Festlegung eines Namens

Das folgende Programm zeigt ein Beispiel für die Festlegung eines Namens. Der Name »n« wird darin mit dem Typ ›int‹ und dem Wert von »7« festgelegt. Nach der Festlegung kann der Name als Ausdruck mit dem festgelegten Typ ›int‹ und den festgelegten Wert »7« verwendet werden.

Wir nennen einen solchen Namen auch einen Wertnamen, weil er im wesentlichen ein Name für einen Wert ist.

Nach solch einer Festlegung kann der Name als Ausdruck verwendet  werden (also an einer Stelle, an der ein Ausdruck erwartet wird) und hat dann, bei einer Auswertung, den für ihn festgelegten Typ ›int‹ und den für ihn festgelegten Wert »7«. (Dies ist wie bei den schon früher behandelten vordefinierten Namen wie »java.lang.Math.PI«.) Wir nennen solch eine Verwendung eines Namens als Ausdruck auch einfach eine Verwendung  des Namens.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

java.lang.System.out.println( java.lang.Integer.MAX_VALUE );
java.lang.System.out.println( 7 );

final int n = 7; /* Festlegung (Schreiben) */
java.lang.System.out.println( n ); /* Verwendung (Lesen) */

java.lang.System.out.println( "n" ); }}

Protokoll
2147483647
7
7
n

Es können auch andere Datentypen, Name oder Werte verwendet werden, wie auch weitere Beispiele zeigen werden.

In dieser Lektion werden erstmals in diesem Kurse Typangaben wie »int« oder »double« auch bewußt innerhalb eines Programms  eingesetzt. Zuvor traten sie nur in vorgegebenen Rahmen oder der Dokumentation  auf.

Deklarationsanweisungen

Der Quelltext »final int n = 7;« aus dem obigen Programm wird als Deklarationsanweisung  bezeichnet. Der Ausdruck hinter dem Gleichheitszeichen (hier: »7«) wird Initialisierungsausdruck  oder Initialisierer  genannt.

Der Gültigkeitsbereich  einer Deklarationsanweisung ist der Bereich des Quelltextes, in dem der deklarierte Bezeichner entsprechend jener Deklarationsanweisung (ohne Qualifikation) verwendet werden kann.

Durch die Deklarationsanweisung »final int n = 7;« wird wird festgelegt, daß im Gültigkeitsbereich der Deklarationsanweisung (vom Initialisierer »7« bis direkt vor dem Ende des die Deklarationsanweisung enthaltenden Blocks) der Name »n«

haben soll.

An Stelle des Typs ›int‹, des Namens »n« und des Wertes »7« kann auch ein anderer Typ, Name beziehungsweise Wert (aus dem Wertebereich des Typs) angegeben werden. Dann wird durch die Deklarationsanweisung festgelegt, daß der Name den angegebenen Typ und Wert hat, wenn er an einer Stelle verwendet wird, an der ein Ausdruck erwartet wird.

Die Schreiben des Namens an einer Stelle, an der ein Ausdruck erwartet wird, ist eine Verwendung  des Namens. Bei solch einer Verwendung im Gültigkeitsbereich einer Deklarationsanweisung hat der Name den durch die Deklarationsanweisung festgelegten Typ und Wert.

Java 
final int n = 7;
auf deutsch:
„Deklarationsanweisung zur Festlegung des Namens »n« mit dem Typ ›int‹ und dem Wert »7«“

Man kann solch einen Namen auch als eine Konstante  bezeichnen, wenn man betonen will, daß er einen konstanten (unveränderlichen) Wert besitzt. (Dieser Gebrauch ist allerdings fachsprachlich nicht ganz korrekt, da das Wort “constant ” in der Java -Sprachspezifikation nur für bestimmte Namen mit konstanten Werten vorgesehen ist.)

Gleichzeitig steht solch ein Name auch für eine Variable, was sogar die technisch korrekte Bezeichnung darstellt, obwohl die in dieser Lektion vorgestellten Variablen gar nicht variabel (veränderlich) sind.

Das folgende kürzere Programm zeigt noch einmal isoliert die Festlegung und Verwendung eines Namens.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final int n = 7; /* Festlegung */
java.lang.System.out.println( n ); /* Verwendung */ }}

Protokoll
7

Schon am Anfang des Kurses wurden Typen, wie ›int‹, ›long‹, »double«, und »java.lang.String«, vorgestellt. Aber erst ab dieser Lektion hier schreiben wir sie auch selber in Programme rein.

»var«

Seit Java 10  kann in einer Variablendeklarationsanweisung »var« an Stelle einer Typangabe verwendet werden. Dann wird der Typ des Ausdrucks hinter dem Gleichheitszeichen verwenden.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final var n = 7;
java.lang.System.out.println( n ); }}

Protokoll
7

Namen als eine Art von Abkürzung ⃗

Das folgende Programm zeigt die Festlegung eines Namens als eine Art von Abkürzung.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final java.lang.String lkw = "Lastkraftwagen";

java.lang.System.out.println
( "Ein " + lkw + "-Fahrer lebt in seinem Fahrzeug." ); }}

transcript
Ein Lastkraftwagen-Fahrer lebt in seinem Fahrzeug.

Man kann sich vorstellen, daß bei der Interpretation des obigen Programms als ein Zwischenschritt der Ausdruck rechts vom Gleichheitszeichen an Stelle des Namens links vom Gleichheitszeichen eingesetzt wird.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

java.lang.System.out.println
( "Ein " + "Lastkraftwagen" + "-Fahrer lebt in seinem Fahrzeug." ); }}

transcript
Ein Lastkraftwagen-Fahrer lebt in seinem Fahrzeug.

Festlegung eines Namens für die Lichtgeschwindigkeit ⃗

Das folgende Programm zeigt die Festlegung eines Namens für den Zahlenwert der Lichtgeschwindigkeit im Vakuum in der Einheit m/s.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final var c = 299792458;

java.lang.System.out.println
( "Die Lichtgeschwindigkeit ist gleich " + c + " m/s." ); }}

transcript
Die Lichtgeschwindigkeit ist gleich 299792458 m/s.

Fehlende Festlegungen ⃗

Das folgende Programm zeigt das Verhalten einer Java -Implementation beim Fehlen einer Festlegung für einen Namen.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

java.lang.System.out.println( "Die goldene Zahl ist gleich " + g ); }}

transcript
Main.java:5: error: cannot find symbol
java.lang.System.out.println( "Die goldene Zahl ist gleich " + g ); }}
^
symbol: variable g
location: class Main
1 error

Weiterleitungen ⃗

Eine Weiterleitung ist eine Konstante, die ihren Wert von einer anderen Konstanten bezieht (und diesen daher „weiterleitet“).

So kann man beispielsweise eine Weiterleitung von »java.lang.Math.PI« (Kreiszahl ‹ π ›) einrichten, die es erlaubt, diesen Wert mit nur zwei Buchstaben zu schreiben und eine vielleicht bevorzugte Kleinschreibung zu verwenden.

Das folgende Programm zeigt die Ausgabe des Umfangs und der Fläche eines Kreises mit einem Radius von drei Metern.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{ final var pi = java.lang.Math.PI;

java.lang.System.out.println
( "Umfang = " + 2 * pi * 3 + " Meter" );

java.lang.System.out.println
( "Flaeche = " + pi * 3 * 3 + " Quadratmeter" ); }}

Protokoll
Umfang = 18.84955592153876 Meter
Flaeche = 28.274333882308138 Quadratmeter

Mehrere Konstanten ⃗

Es ist auch möglich, daß in einem Block mehrere  Konstanten deklariert und verwendet werden.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final int a = 1;
java.lang.System.out.println( a );
final int b = 4;
java.lang.System.out.println( a );
java.lang.System.out.println( b ); }}

transcript
1
1
4

Komplexe Ausdrücke ⃗

Namen dürfen auch für Werte von Ausdrücken festgelegt werden, die mit Operatoren oder Methoden geschrieben sind.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final double x = java.lang.Math.abs( +2 );

java.lang.System.out.println( x ); }}

transcript
2.0

Das folgende Programm zeigt die Festlegung eines Namens für den Zahlenwert der goldenen Zahl, welcher in der Klasse »java.lang.Math« nicht vordefiniert ist.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final double g =( 1 + java.lang.Math.sqrt( 5 ))/ 2;

java.lang.System.out.println( "Die goldene Zahl ist gleich " + g ); }}

transcript
Die goldene Zahl ist gleich 1.618033988749895

Ausdrücke mit anderen Variablen

Es ist auch erlaubt, daß ein Namen für den Wert eines Ausdruck festgelegt wird, der eine Verwendung einer anderen, zuvor deklarierten Variablen enthält.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final int a = 1;
java.lang.System.out.println( a );
final int b = 4 + a;
java.lang.System.out.println( a );
java.lang.System.out.println( b ); }}

transcript
1
1
5
Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final double a = 2; java.lang.System.out.println( a );
final double b = a; java.lang.System.out.println( b );
final double c = a + 1; java.lang.System.out.println( c );
final double d = a + b; java.lang.System.out.println( d ); }}

transcript
2.0
2.0
3.0
4.0

Übungsfragen

?   Interpretation einer Festlegung ⃗

Was gibt das folgende Programm aus?

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final var n = 4;
java.lang.System.out.println( n + 1 );
java.lang.System.out.println( n ); }}

?   Interpretation einer Festlegung (1) ⃗

Was gibt das folgende Programm aus?

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final java.lang.String s = "4";
java.lang.System.out.println( s + 1 ); }}

?   Vervollständigung zu einem Programm ⃗

Was gehört an die Stelle der Lücke in dem folgenden Text, damit er als Programm ausgeführt werden kann?

Hier wird eine möglichst kurze  Lösung gesucht.
Main.txt

public final class Main
{ public static void main( final java.lang.String[] args )
{

final __________ k = "2.3";
java.lang.System.out.println( k ); }}

?   Vervollständigung zu einem Programm (1) ⃗⃗

Was gehört an die Stelle der Lücke in dem folgenden Text, damit er als Programm ausgeführt werden kann?

Hier wird eine möglichst kurze  Lösung gesucht.
Main.txt

public final class Main
{ public static void main( final java.lang.String[] args )
{

final double __________ = 5.6;
java.lang.System.out.println( x ); }}

?   Vervollständigung zu einem Programm (2) ⃗⃗

Was gehört an die Stelle der Lücke in dem folgenden Text, damit er als Programm ausgeführt werden kann und die Zeile »7.0« ausgibt?

Hier wird eine möglichst kurze  Lösung gesucht.
Main.txt

public final class Main
{ public static void main( final java.lang.String[] args )
{

final double x = __________;
java.lang.System.out.println( x ); }}

?   Interpretation von Festlegungen (2) ⃗

Was gibt das folgende Programm aus?

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final int n = 4;
final int m = n + n;

java.lang.System.out.println( n + 1 );
java.lang.System.out.println( m + 1 ); }}

?   Interpretation von Festlegungen (3)

Was gibt das folgende Programm aus?

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final int n = 2;
final double x = n / 4;

java.lang.System.out.println( n );
java.lang.System.out.println( x ); }}

?   Beurteilung von Programmen ⃗

Die beiden folgenden Programme kommen zum selben Ergebnis. Welches gefällt Ihnen besser? Warum?

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final var laengeInZentimetern = 2.0;
final var zentimeterInMillimetern = 10.0;
final var laengeInMillimetern = laengeInZentimetern * zentimeterInMillimetern;

java.lang.System.out.println( laengeInMillimetern ); }}

transcript
20.0
Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

java.lang.System.out.println( 2.0 * 10.0 ); }}

transcript
20.0

?   Interpretation einer Festlegung (4) ⃗

Was gibt das folgende Programm aus?

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final int x = 4;
java.lang.System.out.println( java.lang.Math.abs( x )); }}

?   Interpretation einer Festlegung (5) ⃗

Was gibt das folgende Programm aus?

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final var x = 2.7;
java.lang.System.out.println( java.lang.Float.intBitsToFloat( x )); }}

?   Wirkung einer Initialisierung

Was gibt das folgende Programm aus?

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final var v = java.lang.System.setProperty( "user.country", "IT" );
java.lang.System.out.println( java.lang.System.getProperty( "user.country" ));
java.lang.System.out.println( v ); }}

Übungsaufgaben

/   Verdoppeln einer Zahl

Schreiben Sie in das folgende Programm an die Stelle von »__________« einen Ausdruck, so daß der Wert des Namens »dasDoppelte« das Doppelte des Wertes des Namens »zahl« beträgt! Falls die Deklarationsanweisung »final int zahl = 4;« später in »final int zahl = 5;« verändert wird, soll der Wert von »dasDoppelte« sich automatisch anpassen (und dann «10» betragen).

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final var zahl = 4;

final var dasDoppelte = __________;

java.lang.System.out.println( dasDoppelte ); /* sollte 8 ausgeben */ }}

Die ersten vier Zeilen und die letzte Zeile darf bei dieser Aufgabe nicht verändert werden.

/   Deklarationsanweisung einer final-Variablen, 0

Schreiben Sie ein Java -Programm, in welchem in einem Block eine final-Variable vom Typ ›int‹ mit dem Namen »i« und dem Wert »2« deklariert wird. Das Programm soll dann den Wert jener Variablen ausgeben (dazu soll diese Variable ausgelesen werden). (Das Programm soll nichts anderes enthalten oder tun.)

/   Variable ⃖

Schreiben Sie ein Programm, in dem eine Variable mit dem Typ »int« deklariert und mit dem Wert »3« initialisiert wird.

Reserveaufgaben

/   Deklarationsanweisung einer Variablen, 1

Schreiben Sie ein Java -Programm, in welchem eine Variable vom Typ ›int‹ mit dem Namen »k« und dem Wert »21« deklariert wird. Das Programm soll dann einmal den Wert jener Variablen ausgeben (dieser soll dazu vom Programm aus der Variablen ausgelesen werden) und einmal das Doppelte des Wertes jener Variablen (der dazu wieder vom Programm aus der Variablen ausgelesen werden soll). (Das Programm soll nichts anderes enthalten oder tun.)

/   Deklarationsanweisung einer Variablen, 2

Hinweis für den Dozenten  ► Diese Reserveaufgabe nur bei Bedarf und erst nach der Nachbesprechung der vorherigen Aufgabe gestellt werden.

Schreiben Sie ein Java -Programm, in welchem in einem Block eine Variable vom Typ »double« mit dem Namen »i« und dem Wert »4.8« deklariert wird. Das Programm soll dann den Wert jener Variablen ausgeben. (Das Programm soll nichts anderes enthalten oder tun.)

/   Deklarationsanweisung einer Variablen, 3

Hinweis für den Dozenten  ► Diese Reserveaufgabe nur bei Bedarf und erst nach der Nachbesprechung der vorherigen Aufgabe gestellt werden.

Schreiben Sie ein Java -Programm, in welchem in einem Block eine Variable vom Typ »java.lang.String« mit dem Namen »s« und dem Wert »"abc"« deklariert wird. Das Programm soll dann den Wert jener Variablen ausgeben. (Das Programm soll nichts anderes enthalten oder tun.)

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723223 stefan_ram:723223 Deklaration und Verwendung von Konstanten Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723223, slrprddef723223, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/konstantendeklaration_java