Variable: Unterschied zwischen den Versionen

Aus EINI
Wechseln zu: Navigation, Suche
(Erläuterung)
 
(21 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Eine Variable repräsentiert einen Bereich im Speicher des Rechners um Zugang zu diesem Speicher zu erhalten und diesen manipulieren zu können.
+
Eine '''Variable''' repräsentiert einen Bereich im Speicher des Rechners, um Zugang zu diesem Speicher zu erhalten und diesen manipulieren zu können.
  
 
Variablen werden in den meisten [[Streng getypte Programmiersprachen|streng getypten]] Programmiersprachen mit einem [[Datentyp]] und einem [[Identifikator|Namen]] versehen.
 
Variablen werden in den meisten [[Streng getypte Programmiersprachen|streng getypten]] Programmiersprachen mit einem [[Datentyp]] und einem [[Identifikator|Namen]] versehen.
Zeile 7: Zeile 7:
 
In Java gibt es zwei Formen von Variablen: Variablen mit [[Primitiver Datentyp|primitivem Datentyp]] und Variablen mit [[Objekt|Objektdatentyp]].
 
In Java gibt es zwei Formen von Variablen: Variablen mit [[Primitiver Datentyp|primitivem Datentyp]] und Variablen mit [[Objekt|Objektdatentyp]].
  
Variablen mit primitivem Datentyp repräsentieren einen direkten Zugriff auf einen Speicherbereich der Größe des primitiven Datentyps. Diese Variablen werden als Parameter in einem Methodenaufruf ausschließlich über [[Call by Value]] übergeben. Das heißt der Speicherbereich selbst wird nicht an den Methodenaufruf übergeben, sondern dessen Inhalt.
+
Variablen mit '''primitivem Datentyp''' repräsentieren einen direkten Zugriff auf einen Speicherbereich der Größe des primitiven Datentyps. Diese Variablen werden als Parameter in einem Methodenaufruf ausschließlich über [[Call by Value]] übergeben. Das heißt, der Speicherbereich selbst wird nicht an den Methodenaufruf übergeben, sondern dessen Inhalt.
  
Variablen mit einem Objektdatentyp repräsentieren eine Referenz auf ein Objekt, also lediglich einen virtuellen Zeiger auf einen Speicherbereich. Wird eine Funktion mit einem Objekt als Parameter aufgerufen, wird entsprechend nur die Referenz auf das Objekt als Parameter übergeben. Das bedeutet wiederum, dass Änderungen an einem Objekt von jedem Ort im Programmcode Einfluss auf das Objekt selbst haben. Diese Funktionalität wird [[Call by Reference]] genannt.
+
Variablen mit einem '''Objektdatentyp''' repräsentieren eine Referenz auf ein Objekt, also lediglich einen virtuellen Zeiger auf einen Speicherbereich. Wird eine Funktion mit einem Objekt als Parameter aufgerufen, wird entsprechend nur die Referenz auf das Objekt als Parameter übergeben. Das bedeutet wiederum, dass Änderungen an einem Objekt von jedem Ort im Programmcode Einfluss auf das Objekt selbst haben. Diese Funktionalität wird [[Call by Reference]] genannt.
  
Eine weitere Kategorisierung von Variablen findet anhand ihrer Verwendung statt:
+
Eine weitere Kategorisierung von Variablen findet anhand ihrer '''Verwendung''' statt:
  
#Variablen können als lokale Variable in einem Funktions-/Methodenaufruf verwendet werden.
+
#Variablen können als '''lokale Variable''' in einem Funktions-/Methodenaufruf verwendet werden.
#Variablen können als Attribut eines Objektes verwendet werden.
+
#Variablen können als '''Attribut''' eines Objektes verwendet werden.
#Variablen können als statisches Klassenattribut verwendet werden.
+
#Variablen können als '''statisches Klassenattribut''' verwendet werden.
  
Variablen müssen in Java vor ihrer Verwendung deklariert werden. Bevor ihr Wert verwendet werden kann, muss sie zudem durch eine [[Zuweisung]] initialisiert werden.
+
Variablen müssen in Java vor ihrer Verwendung '''deklariert''' werden. Bevor der Wert einer Variablen verwendet werden kann, muss sie zudem durch eine [[Zuweisung]] '''initialisiert''' werden.
  
 
= Deklaration =
 
= Deklaration =
  
Durch die Deklaration einer Variablen wird der Bedarf an Speicher in einem Programm signalisiert und dieser reserviert. Um eine Variable zu deklarieren, muss zuerst der Typ angegeben werden. Danach wird die Variable benannt.
+
==Erläuterung==
 +
 
 +
Durch die '''Deklaration''' einer Variablen wird der Bedarf an Speicher in einem [[Programm]] signalisiert und dieser reserviert. Um eine Variable zu deklarieren, muss zuerst der Typ angegeben werden. Danach wird die Variable benannt.
  
 
<code>Typ Variablenname;</code>
 
<code>Typ Variablenname;</code>
 +
 +
Siehe auch: [[Deklaration]]
  
 
==Beispiel ==
 
==Beispiel ==
 
<source lang="java" title="Einfache Deklaration">int number;</source>
 
<source lang="java" title="Einfache Deklaration">int number;</source>
Dies deklariert eine Variable vom Typ <code>int</code> und dem Namen <code>number</code>. Entsprechend werden 32 Bit Speicher reserviert. Diese stehen nun über den Namen der Variablen zur Verfügung und werden stets als eine vorzeichenbehaftete Ganzzahl interpretiert.
+
Dies deklariert eine Variable vom [[Datentyp|Typ]] <code>int</code> mit dem Namen <code>number</code>. Entsprechend werden 32 Bit Speicher reserviert. Diese stehen nun über den Namen der Variablen zur Verfügung und werden stets als eine vorzeichenbehaftete Ganzzahl interpretiert.
  
 
= Initialisierung =
 
= Initialisierung =
 
+
==Erläuterung==
Bevor man den '''Wert''' einer Variablen verwenden kann, muss sie zuerst irgendwo im Programm mit einem Wert initialisiert werden. Dies geschieht durch eine Zuweisung. Einer Variablen kann insbesondere auch bei Deklaration ein Wert zugewiesen werden.
+
Bevor man den '''Wert''' einer Variablen verwenden kann, muss sie zuerst irgendwo im Programm mit einem Wert '''initialisiert''' werden. Dies geschieht durch eine [[Zuweisung]]. Einer Variablen kann bereits bei der Deklaration ein Wert zugewiesen werden.
  
 
<code>Typ Variablenname = Initialwert;
 
<code>Typ Variablenname = Initialwert;
Zeile 42: Zeile 46:
 
double value = 5.0;
 
double value = 5.0;
 
</source>
 
</source>
Dies deklariert eine Variable vom Typ <code>double</code> und dem Namen <code>value</code>. Sie wird mit dem Wert <code>5.0</code> initialisiert.
+
Dies deklariert eine Variable vom Typ <code>double</code> mit dem Namen <code>value</code>. Sie wird mit dem Wert <code>5.0</code> initialisiert.
  
 
<source lang="Java" title="Initialisierung nach Deklaration">
 
<source lang="Java" title="Initialisierung nach Deklaration">
Zeile 49: Zeile 53:
 
number = 42;
 
number = 42;
 
</source>
 
</source>
Dies deklariert erneut eine Variable vom Typ <code>int</code> und dem Namen <code>number</code>. Sie wird erst in der nächsten Zeile mit dem Wert <code>42</code> initialisiert. Zwischen Deklaration und Initialisierung darf beliebiger anderer Code ausgeführt werden, solange dieser die Variable <code>number</code> dabei nicht verwendet.
+
Dies deklariert erneut eine Variable vom Typ <code>int</code> mit dem Namen <code>number</code>. Sie wird erst in der nächsten Zeile mit dem Wert <code>42</code> initialisiert. Zwischen Deklaration und Initialisierung darf beliebiger anderer Code ausgeführt werden, solange dieser die Variable <code>number</code> dabei nicht verwendet.
  
 
Wird eine primitive Variable als Attribut verwendet, so wird sie bei [[Instanziierung]] des [[Objekt | Objektes]] mit 0 initialisiert. Trifft dies auf eine Objektvariable zu, wird diese als [[null]] initialisiert. Dieses Verhalten kann man durch den [[Konstruktor]] oder durch Angabe eines Standardwertes bei der Deklaration als Attribut verändern.
 
Wird eine primitive Variable als Attribut verwendet, so wird sie bei [[Instanziierung]] des [[Objekt | Objektes]] mit 0 initialisiert. Trifft dies auf eine Objektvariable zu, wird diese als [[null]] initialisiert. Dieses Verhalten kann man durch den [[Konstruktor]] oder durch Angabe eines Standardwertes bei der Deklaration als Attribut verändern.
Zeile 57: Zeile 61:
 
== Lokale Variable ==
 
== Lokale Variable ==
  
Eine Variable wird ''lokal'' genannt, wenn sie innerhalb eines Methodenaufrufs deklariert wird. Dies gilt auch für die Parametervariablen einer Methode.
+
===Erläuterung===
 +
 
 +
Eine Variable wird '''lokal''' genannt, wenn sie innerhalb einer [[Methode]] deklariert wird. Dies gilt auch für die [[Methode#Parameter|Parametervariablen]] einer Methode.
  
 
=== Beispiel ===
 
=== Beispiel ===
Zeile 72: Zeile 78:
 
</source>
 
</source>
  
In diesem Beispiel sind die Variablen <code>args</code>, <code>value</code>, <code>iterations</code> und <code>i</code> lokale Variablen.
+
In diesem Beispiel sind die Variablen <code>args</code>, <code>value</code>, <code>iterations</code> und <code>i</code> lokale Variablen. Sie existieren ausschließlich im Aufruf von <code>main</code> und können nur hier verändert oder verwendet werden.
  
 
== Attributvariable ==
 
== Attributvariable ==
  
Eine Variable wird ''Attribut'' genannt, wenn sie innerhalb einer Klasse deklariert wird.
+
===Erläuterung===
 +
 
 +
Eine Variable wird '''Attribut''' genannt, wenn sie innerhalb einer [[Klasse]] deklariert wird.
 +
 
 +
===Syntaxdiagramm===
 +
 
 +
[[Datei:attribute_declaration.png]]
  
 
=== Beispiel ===
 
=== Beispiel ===
Zeile 93: Zeile 105:
 
</source>
 
</source>
  
In diesem Beispiel sind die Variablen <code>width</code>, <code>height</code> und <code>length</code> Attributvariablen, die Variable <code>w</code> ist eine lokale Variable der Methode <code>setWidth</code>.
+
In diesem Beispiel sind die Variablen <code>width</code>, <code>height</code> und <code>length</code> Attributvariablen. Die Variable <code>w</code> ist hingegen eine lokale Variable der Methode <code>setWidth</code>. Die Attributvariablen existieren für jede Objektinstanz der Klasse einmal und sind unabhängig von den Werten der Attributvariablen anderer Objekte der gleichen Klasse.
  
== Statische Klassenvariable ==
+
Attribute können auch einen Wert bei der Deklaration zugewiesen bekommen:
 
+
Eine Variable wird ''Klassenvariable'' oder ''Klassenattribut'' genannt, wenn sie innerhalb einer Klasse statisch deklariert wird. Dies ist meistens bei Konstanten der Fall.
+
 
+
=== Beispiel ===
+
  
 
<source lang="java">
 
<source lang="java">
 
public class Sphere {
 
public class Sphere {
 
+
     private double radius = 1;
     public static final double PI = 3.1415;
+
 
+
 
     [...]
 
     [...]
 
}
 
}
 
</source>
 
</source>
  
Eine statische Klassenvariable wird für die Klasse angelegt und ist daher global innerhalb der Klasse sichtbar. Ihr Wert wird nicht für jede Instanz der Klasse vermerkt, sondern für die Klasse selbst. Deshalb sind veränderbare Klassenvariablen ein häufiger Grund für unerwünschte [[Seiteneffekte]] und sind deshalb ungerne gesehen.
+
Die Attribute eines Objektes werden dann bei der Instanziierung mit diesem Wert instanziiert. Die Attribute haben ihren so definierten initialen Wert bereits vor dem Aufruf der Programmroutine des [[Konstruktor]]s.
  
= Zuweisung =
+
== Klassenvariable ==
  
Eine Zuweisung weist einer Variablen einen neuen Wert zu. Der Wert des Speichers, den die Variable repräsentiert, wird also direkt manipuliert. Eine Zuweisung ist entsprechend die '''einzige''' Möglichkeit einen Speicherbereich zu manipulieren.
+
===Erläuterung===
  
Einer Variablen kann nur ein Wert zugewiesen werden, wenn sie zuvor deklariert wurde. Wurde eine Variable nicht deklariert, kann ihr Name während der Zuweisung zu keinem Speicherbereich aufgelöst werden, selbst wenn die Variable später deklariert wird.
+
Eine Variable wird '''Klassenvariable''' oder '''Klassenattribut''' genannt, wenn sie innerhalb einer Klasse [[static|statisch]] deklariert wird.  
  
Eine Zuweisung geschieht durch Verwendung eines einzelnen '''=''' Symboles zwischen dem Namen der Variablen und dem neuen Wert. Dabei wird der Ausdruck '''rechts''' vom '''=''' immer zuerst ausgewertet, bevor er der Variablen '''links''' vom '''=''' zugewiesen wird.
+
Eine Klassenvariable wird für die Klasse angelegt und ist daher innerhalb der gesamten Klasse [[Sichtbarkeit|sichtbar]]. Ihr Wert wird nicht für jede Instanz der Klasse vermerkt, sondern für die Klasse selbst. Deshalb sind veränderbare, das heißt nicht als [[final]] deklarierte, Klassenvariablen ein häufiger Grund für unerwünschte [[Nebeneffekt|Nebeneffekte]] und ungerne gesehen.
  
Da eine Zuweisung eine Anweisung ist, kann sie auch nur dort verwendet werden, wo eine auszuführende Anweisung verwendet werden kann. (In [[Methode | Methoden]] oder [[Konstruktor | Konstruktoren]])
+
Wenn eine nicht finale Klassenvariable auch noch [[öffentlich]] ist, dann kann sie als '''globale Variable''' bezeichnet werden. Dieses Konzept wird in [[Java]] jedoch üblicherweise nicht verwendet.
  
Dabei ist zu beachten, dass der Wert '''rechts''' vom '''=''' den gleichen Typ haben muss, wie die Variable, die '''links''' vom '''=''' steht.
+
=== Beispiel ===
  
<code>Variable = Wert;</code>
+
<source lang="java">
 +
public class Sphere {
  
== Beispiele ==
+
    public static final double PI = 3.1415;
  
<source lang="java" title="Zuweisung nach Deklaration">
+
    [...]
int value;
+
}
value = 0;
+
 
</source>
 
</source>
  
<source lang="java" title="Zuweisung während Deklaration">
+
= Zuweisung =
int value = 0;
+
Eine '''Zuweisung''' ist eine spezielle Form der [[Anweisung]]. Sie weist dem Speicher, der durch eine Variable repräsentiert wird, einen neuen Wert zu.
</source>
+
  
<source lang="java" title="Illegale Zuweisung ohne Deklaration">
+
Siehe auch: [[Zuweisung]]
value = 0;
+
</source>
+
 
+
<source lang="java" title="Zuweisung mit Berechnung abhängig vom Wert einer anderer Variable">
+
int value = 2;
+
int amount = 3 * value;
+
</source>
+
 
+
<source lang="java" title="Zuweisung mit Berechnung abhängig vom eigenen Wert">
+
int value = 2;
+
value = value + 3;
+
</source>
+

Aktuelle Version vom 10. Januar 2018, 19:08 Uhr

Eine Variable repräsentiert einen Bereich im Speicher des Rechners, um Zugang zu diesem Speicher zu erhalten und diesen manipulieren zu können.

Variablen werden in den meisten streng getypten Programmiersprachen mit einem Datentyp und einem Namen versehen.

Variablen in Java

In Java gibt es zwei Formen von Variablen: Variablen mit primitivem Datentyp und Variablen mit Objektdatentyp.

Variablen mit primitivem Datentyp repräsentieren einen direkten Zugriff auf einen Speicherbereich der Größe des primitiven Datentyps. Diese Variablen werden als Parameter in einem Methodenaufruf ausschließlich über Call by Value übergeben. Das heißt, der Speicherbereich selbst wird nicht an den Methodenaufruf übergeben, sondern dessen Inhalt.

Variablen mit einem Objektdatentyp repräsentieren eine Referenz auf ein Objekt, also lediglich einen virtuellen Zeiger auf einen Speicherbereich. Wird eine Funktion mit einem Objekt als Parameter aufgerufen, wird entsprechend nur die Referenz auf das Objekt als Parameter übergeben. Das bedeutet wiederum, dass Änderungen an einem Objekt von jedem Ort im Programmcode Einfluss auf das Objekt selbst haben. Diese Funktionalität wird Call by Reference genannt.

Eine weitere Kategorisierung von Variablen findet anhand ihrer Verwendung statt:

  1. Variablen können als lokale Variable in einem Funktions-/Methodenaufruf verwendet werden.
  2. Variablen können als Attribut eines Objektes verwendet werden.
  3. Variablen können als statisches Klassenattribut verwendet werden.

Variablen müssen in Java vor ihrer Verwendung deklariert werden. Bevor der Wert einer Variablen verwendet werden kann, muss sie zudem durch eine Zuweisung initialisiert werden.

Deklaration

Erläuterung

Durch die Deklaration einer Variablen wird der Bedarf an Speicher in einem Programm signalisiert und dieser reserviert. Um eine Variable zu deklarieren, muss zuerst der Typ angegeben werden. Danach wird die Variable benannt.

Typ Variablenname;

Siehe auch: Deklaration

Beispiel

int number;

Dies deklariert eine Variable vom Typ int mit dem Namen number. Entsprechend werden 32 Bit Speicher reserviert. Diese stehen nun über den Namen der Variablen zur Verfügung und werden stets als eine vorzeichenbehaftete Ganzzahl interpretiert.

Initialisierung

Erläuterung

Bevor man den Wert einer Variablen verwenden kann, muss sie zuerst irgendwo im Programm mit einem Wert initialisiert werden. Dies geschieht durch eine Zuweisung. Einer Variablen kann bereits bei der Deklaration ein Wert zugewiesen werden.

Typ Variablenname = Initialwert;

Variablenname = Initialwert;

Beispiele

double value = 5.0;

Dies deklariert eine Variable vom Typ double mit dem Namen value. Sie wird mit dem Wert 5.0 initialisiert.

int number;
[...]
number = 42;

Dies deklariert erneut eine Variable vom Typ int mit dem Namen number. Sie wird erst in der nächsten Zeile mit dem Wert 42 initialisiert. Zwischen Deklaration und Initialisierung darf beliebiger anderer Code ausgeführt werden, solange dieser die Variable number dabei nicht verwendet.

Wird eine primitive Variable als Attribut verwendet, so wird sie bei Instanziierung des Objektes mit 0 initialisiert. Trifft dies auf eine Objektvariable zu, wird diese als null initialisiert. Dieses Verhalten kann man durch den Konstruktor oder durch Angabe eines Standardwertes bei der Deklaration als Attribut verändern.

Verwendung

Lokale Variable

Erläuterung

Eine Variable wird lokal genannt, wenn sie innerhalb einer Methode deklariert wird. Dies gilt auch für die Parametervariablen einer Methode.

Beispiel

public static void main(String[] args){
    int value = 3;
    int iterations = 5;
    for(int i = 0; i < iterations; i++){
        value += value;
    }
    System.out.println(value);
}

In diesem Beispiel sind die Variablen args, value, iterations und i lokale Variablen. Sie existieren ausschließlich im Aufruf von main und können nur hier verändert oder verwendet werden.

Attributvariable

Erläuterung

Eine Variable wird Attribut genannt, wenn sie innerhalb einer Klasse deklariert wird.

Syntaxdiagramm

Attribute declaration.png

Beispiel

public class Cuboid {
    private double width;
    private double height;
    private double length;
    [...]
    public void setWidth(double w){
        this.width = w;
    }
    [...]
}

In diesem Beispiel sind die Variablen width, height und length Attributvariablen. Die Variable w ist hingegen eine lokale Variable der Methode setWidth. Die Attributvariablen existieren für jede Objektinstanz der Klasse einmal und sind unabhängig von den Werten der Attributvariablen anderer Objekte der gleichen Klasse.

Attribute können auch einen Wert bei der Deklaration zugewiesen bekommen:

public class Sphere {
    private double radius = 1;
    [...]
}

Die Attribute eines Objektes werden dann bei der Instanziierung mit diesem Wert instanziiert. Die Attribute haben ihren so definierten initialen Wert bereits vor dem Aufruf der Programmroutine des Konstruktors.

Klassenvariable

Erläuterung

Eine Variable wird Klassenvariable oder Klassenattribut genannt, wenn sie innerhalb einer Klasse statisch deklariert wird.

Eine Klassenvariable wird für die Klasse angelegt und ist daher innerhalb der gesamten Klasse sichtbar. Ihr Wert wird nicht für jede Instanz der Klasse vermerkt, sondern für die Klasse selbst. Deshalb sind veränderbare, das heißt nicht als final deklarierte, Klassenvariablen ein häufiger Grund für unerwünschte Nebeneffekte und ungerne gesehen.

Wenn eine nicht finale Klassenvariable auch noch öffentlich ist, dann kann sie als globale Variable bezeichnet werden. Dieses Konzept wird in Java jedoch üblicherweise nicht verwendet.

Beispiel

public class Sphere {

    public static final double PI = 3.1415;

    [...]
}

Zuweisung

Eine Zuweisung ist eine spezielle Form der Anweisung. Sie weist dem Speicher, der durch eine Variable repräsentiert wird, einen neuen Wert zu.

Siehe auch: Zuweisung