In diesem Abschnitt werden wir uns mit den sog. Variablen auseinandersetzen. Dieser Begriff beschreibt einen der elementarsten Sprachkonstrukte sowohl in der Programmiersprache Java als auch in anderen Programmiersprachen. Die syntaktische Definition kann in verschiedenen Sprachen jedoch eine andere sein, siehe auch Syntax.

Problembeschreibung

Bearbeiten

In einem Programm werden Variablen als logische Namen für Speicherbereiche verwendet, unter denen Werte gespeichert, geändert und aufgerufen werden können. Statt einer kryptischen Adresse, aus der man keine Bedeutung ersehen kann, wird mit den Variablennamen ein für den Menschen sprechender Ausdruck verwendet wie zum Beispiel "Nachricht", sodass man die Bedeutung des Wertes im Kontext erkennen kann.

Erinnern Sie sich noch an das Beispiel aus dem 1. Kapitel? Dort besprachen wir ein Programm, das lediglich im Stande war, einen genau spezifizierten Text auszugeben. Natürlich könnte man den Text ändern, das Programm neu übersetzen und erhielte dann ein Programm, welches einen anderen Text ausgäbe (möglicherweise haben Sie das ja schon ausprobiert); jedoch wäre es nicht ohne weiteres möglich, ohne ein erneutes Übersetzen die Ausgabe des Programms zu ändern.

Ganz nützlich wäre für diesen Zweck daher die Möglichkeit, nicht den Text direkt eintragen zu müssen, sondern stattdessen einen Platzhalter anzugeben, der den gewünschten Text beinhaltet. Diesen Platzhalter könnte man dann nämlich durch geeignete Befehle (welche das sind, werden wir in diesem Kurs noch sehen) manipulieren, etwa um stets die aktuelle Uhrzeit ausgeben zu können.

Machen wir uns die Benutzung von Variablen an einem Beispiel deutlich:

public class HelloWorld
{
   public static void main( String[] args )
   {
      String nachricht = "Hallo Welt (diesmal aus einer Variablen)!";
      System.out.println( nachricht );
   }
}

Sehen Sie den Unterschied zur ursprünglichen Version? Statt den Text direkt zwischen die Klammern nach System.out.println(...) zu schreiben, haben wir eine Variable mit dem Namen nachricht erzeugt und ihr gesagt, welchen Text sie beinhalten soll. Um dies genauer zu verstehen, schauen wir uns noch einmal diese Zeile an:

Mit dem Abschnitt String nachricht deklarieren (man spricht manchmal auch von bekanntgeben) wir eine Variable. Eine solche Deklaration beinhaltet immer zwei Komponenten, einen sog. Datentyp (behandeln wir in der nächsten Einheit genauer) und den Variablennamen. In unserem Fall ist der Datentyp String (damit ist gemeint, dass diese Variable ausschließlich Text innerhalb von "..." aufnehmen kann) und die Variable hat den Namen nachricht. Prinzipiell könnte man diese Zeile an dieser Stelle schon mit einem Semikolon abschließen:

String nachricht;

In diesem Fall würde der Compiler während des Übersetzens des Quelltextes jedoch darauf aufmerksam machen, dass die Variable nicht initialisiert wurde.

Initialisierung

Bearbeiten

Mit einer Initialisierung bezeichnet man das Zuweisen eines Wertes an eine Variable zum Zeitpunkt ihrer Deklaration. In Java erfolgt dies durch ein Gleichzeichen (=) im Anschluß an den Variablennamen und einen nachfolgenden Wert. Natürlich muss auch diese Zeile durch einen Strichpunkt abgeschlossen werden. In unserem Beispiel ist dies also

String nachricht = "Hallo Welt (diesmal aus einer Variablen)!";

Die Variable nachricht wurde mit "Hallo Welt (diesmal aus einer Variablen)!" initialisiert.

Achten Sie stets darauf, dass Sie Variablen geeignet initialisieren. Wir werden im späteren Verlauf des Kurses sehen, dass anderenfalls unerwartete Ergebnisse des Programms die Folge sein können. Versuchen Sie doch mal herauszufinden, was folgendes Programm tut:

 public class HelloWorld
 {
    public static void main(String[] args)
    {
       String nachricht;
       System.out.println(nachricht);
    }
 }

Sind Sie vom Ergebnis überrascht?

 
Schon gewusst?
Viele Programmfehler entspringen der Tatsache, dass einige Variablen versehentlich nicht initialisiert wurden.

Benutzung von Variablen

Bearbeiten

Wie Sie im Beispiel schon gesehen haben, geht man mit Variablen um, wie mit dem eigentlichen Inhalt. Statt des ursprünglichen Textes haben wir einfach die Variable zwischen die Klammern geschrieben.

Ändern von Variablen

Bearbeiten

Zunächst die schlechte Nachricht: Den Datentyp einer Variablen kann man nicht ändern; den Namen ebenfalls nicht (man könnte höchstens eine Kopie erzeugen). Den Wert einer Variablen kann man hingegen durchaus ändern. Dies geschieht wie bei der Initialisierung mit Hilfe des Gleichzeichens (=). Fügen Sie doch einfach mal folgende Zeile zwischen String nachricht = "Hallo Welt (diesmal aus einer Variablen)!" und System.out.println(nachricht); ein:

nachricht = "Hallo Welt (diesmal aus einer geänderten Variablen)!";

Übersetzen Sie das Programm und führen Sie es aus. Sehen Sie die Änderung? Durch die sog. Zuweisung des neuen Textes an die Variable nachricht, haben wir deren Inhalt verändert.

Sonstiges

Bearbeiten

Hier noch ein paar interessante Details unter Ihnen:

  • Möglicherweise fragen Sie sich, ob man Variablen auch löschen könnte. Variablen können nicht wirklich gelöscht werden, ihre Lebensdauer oder Gültigkeit wird bestimmt durch ihre Stellung im Code, siehe Gültigkeitsdauer (Scope).

Etwas vorausgreifend, bestimmt, aber ein Hinweis auf einen häufigen und sehr hartnäckigen Programmierfehler, die sogenannten Memoryleaks oder Speicherlecks : Wenn eine Variable vor dem Ende ihrer Gültigkeitsdauer nicht mehr gebraucht wird, sollte sie auf ihren Default zurückgestellt werden. Dies ist vor allem bei Objekten wichtig, welche sonst länger als nötig Speicher verbrauchen können und dadurch unter Umständen die Programmausführung behindern können.


  • Es gibt Programmiersprachen, die auch ohne eine Deklaration von Variablen auskommen.

In Java aber muss jede benutzte Variable bekannt gegeben (deklariert) und mit einem Typ versehen (typisiert) sein (siehe Typsicherheit).

Wenn Sie dies für einen überflüssigen Zwang halten, so denken Sie doch mal darüber nach, was passiert, wenn sie sich vertippen würden: Der Compiler würde anmerken, dass die Variable nachricht nicht bekannt sei und sie so vor Schlimmerem bewahren, während in anderen Sprachen stillschweigend davon ausgegangen würde, dass nachricht einfach eine neue Variable sei.

Und wenn Sie es jetzt immer noch nicht glauben, probieren Sie einfach eine Scriptsprache aus, bei der die Typ-überprüfung per default ausgeschaltet ist. Verwenden sie dabei viele Variablen mit längeren komplexen Namen und ev. eine Flasche Baldrian zur Beruhigung.

Einige andere Beispiele werden Sie in der 2. Übung finden. Dort werden Sie Schritt für Schritt auch an andere Datentypen herangeführt, ohne jedoch zu viel vorwegzunehmen.