Lokale Variablen in Java (Lokale Variablen in Java), Lektion, Seite 723791
https://www.purl.org/stefan_ram/pub/lokale_variablen_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Variablen und Methoden in Java 

Gültigkeitsbereich von Variablen (Quelltextmodell)

Main.java

public final class Main
{

public static void method()
{ final int a = 2; java.lang.System.out.println( a ); }

public static void main( final java.lang.String[] args )
{ final int a = 1; method(); java.lang.System.out.println( a ); }}

Protokoll
2
1

Im obenstehenden Programm gibt es zwei Variablen »a«. Eine Variable ist nicht nur durch ihren Namen, sondern auch durch ihren Gültigkeitsbereich gekennzeichnet. Die beiden Variablen haben zwar beide denselben Namen »a«, aber unterschiedliche Gültigkeitsbereiche. Daher sind es zwei verschiedene Variablen.

Wann immer der Name »a« im Hauptprogramm »main« verwendet wird, steht er für die Variable »a«, deren Deklaration sich am Anfang des Hauptprogramms befindet und die den Wert »1« hat.

Wann immer der Name »a« in der Methode »method« verwendet wird, steht er für die Variable »a«, deren Deklaration sich am Anfang des Rumpfs der Methode »method« befindet und die den Wert »2« hat.

Es ist nicht möglich, im Hauptprogramm »main« auf die Variable »a«, deren Deklaration sich in der Methode »method« befindet, zuzugreifen. Genauso ist es auch nicht möglich, in der Methode »method« auf die Variable »a«, deren Deklaration sich im Hauptprogramm »main« befindet, zuzugreifen. (Unter einem Zugriff  oder dem Zugreifen  auf eine Variable verstehen wir, den Wert jener Variablen auszulesen oder ihn zu verändern.)

Es ist nicht möglich, aus einer Methode direkt auf eine Variable einer anderen Methode zuzugreifen.

Der Gültigkeitsbereich eines einfachen Namens (Bezeichners) sollte so klein wie möglich sein. Wenn ein Bezeichner einen großen Gültigkeitsbereich hat, wird das Programm nämlich unübersichtlicher, weil es schwieriger, wird diesen großen Gültigkeitsbereich noch zu überblicken um darin beispielsweise alle Verwendungen des Bezeichners zu finden. Oft kommt es dann auch vor, daß an einer Stelle passende oder kurze Bezeichner nicht verwendet werden können, weil sie schon vergeben sind. Daher ist es passend, wenn der Gültigkeitsbereich von in einer Methode deklarierten Variablen nicht über jene Methode hinausgeht.

Auf Variablen, die in einer Methode deklariert wurden, kann nur in jener Methode zugegriffen werden; daher werden sie auch als lokale Variablen  (der Methode) bezeichnet.

Zur Kommunikation verschiedener Methoden untereinander sollen (anstatt auf Variablen anderer Methoden zuzugreifen) die dafür vorgesehenen Schnittstellen, wie beispielsweise Parameter und Aufrufwerte verwendet werden. Wir werden später lernen, wie man Methode deklariert, die Parameter haben oder einen Wert zurückgeben.

Nur dadurch, daß man sicher sein kann, daß andere Methoden nicht auf lokale Variablen einer Methode zugreifen können, wird es beispielsweise möglich, lokale Variablen einer Methode umzubenennen oder zu entfernen. (Sonst könnte dies zu Fehlern in anderen Methoden führen.) Dies ist ein wichtiger Grund dafür, daß es nicht möglich sein soll, aus anderen Methoden auf lokale Variablen einer Methode zuzugreifen.

Man kann dies mit einem Gerät  wie beispielsweise einem separaten Mikrophon  vergleichen: Das Gerät hat bestimmte Schnittstellen, die für die Nutzung des Gerätes vorgesehen sind (bei einem Mikrophon wäre dies üblicherweise ein Stecker ). Daneben hat es interne elektronische Bauteile, auf die man aber nicht  von außen zugreifen darf. Ein Außenstehender kennt normalerweise die Regeln für den Umgang mit diesen Bauteilen gar nicht und könnte das Gerät bei einem Zugriff auf sie beschädigen. Daher werden diese internen Bauteile durch ein Gehäuse  vor dem Zugriff von außen geschützt. Für eine Methode gibt es verschiedene vorgesehene Schnittstellen  zur Kommunikation mit ihrem Aufrufer und ihrer Umgebung, wie Rückgabewerte, Parameter, Wirkungen und Umgebungsabhängigkeiten. Die lokalen Variablen einer Methodeninkarnation gehören jedoch nicht  zu jenen vorgesehenen Schnittstellen.

Existenzdauer von Variablen (Laufzeitmodell) _

Main.java

public final class Main
{

public static void printRand()
{ final double x = java.lang.Math.random();
java.lang.System.out.println( x ); }

public static void main( final java.lang.String[] args )
{ printRand(); printRand(); }}

Protokoll
0.8550317558657385
0.19970069089234777

Beim Aufruf der Methode »printRand()« wird eine Inkarnation der Methode angelegt. Es handelt sich dabei um eine Kopie der Methode, in welcher die in der Methode deklarierten Variablennamen inkarniert werden, was bedeutet, daß Variablen (also Speicherplätze) für sie angelegt werden. Diese Variablen existieren nur während der Aufruf der Methode aktiv ist.

In dem obenstehenden Beispielprogramm wird die Methode »printRand()« zweifach aufgerufen. Beim ersten Aufruf wird eine Inkarnation der Methode und der Variablen »x« angelegt. Diese Konstante hat den Wert »0.8550317558657385«. Nach der Ausgabe jenes Wertes endet der Ablauf der Methode und dann wird die Inkarnation der Methode einschließlich der Inkarnation ihrer Variablen »x« vernichtet.

Danach wird dieselbe Methode erneut aufgerufen und Inkarniert. Die neue Inkarnation kann aber nun nicht mehr auf die vorherige Inkarnation der Methode und auch nicht mehr auf die vorige Inkarnation der Variablen zugreifen. Sie hat eine eigene neue Inkarnation der Variablen »x« mit dem Wert »0.19970069089234777«.

In diesem Sinne steht das »x« des obigen Programmes für zwei  verschiedene Variablen – eine pro Aufruf!

Zuordnung zu Modellen _

Der Gültigkeitsbereich ist ein Begriff des Quelltextmodells, während die Existenzdauer ein Begriff des Laufzeitmodells ist.

Übungsaufgaben *

/   Refaktor *

Überarbeiten Sie das erste Beispielprogramm dieser Lektion so, daß die beiden Variablen unterschiedliche  Namen haben. Versuchen Sie anschließend aus dem Hauptprogramm auf die Variable der Methode »method« zuzugreifen, oder umgekehrt aus der Methode »method« auf die Variable des Hauptprogrammes.

/   Refaktor (1) *

Erstellen Sie eine Ersatzdarstellung des zweiten Beispielprogramms dieser Lektion, indem Sie den Block der Methode »printRand()« zweimal hintereinander in das Hauptprogramm kopieren und dann die Deklaration und die Aufrufe der Methode »printRand()« löschen. Das neue Programm sollte nun ebenfalls zwei (im allgemeinen verschiedene) Zufallszahlen ausgeben.

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 stefanram723791 stefan_ram:723791 Lokale Variablen in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723791, slrprddef723791, 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/lokale_variablen_java