Klassen in Java
class Punkt // Deklaration der Klasse Punkt { /* Der Klassenrumpf enthält Datenfelder (Attribute) */ }
Eine Variable kann überall in einer Klasse deklariert werden. Eine Variablendeklaration besteht immer aus einem Datentypen und dem Variablennamen. Der Variablenname sollte so gewählt werden, dass man beim Lesen sofort versteht, wofür die Variable verwendet wird. Da unsere Klasse Punkt noch keine Variablen besitzt, werden wir dieser nun zwei hinzufügen.
class Punkt // Deklaration der Klasse Punkt { int x_koordinate; /* x-Position unseres Punktes */ int y_koordinate; /* y-Position unseres Punktes */ }
Klassen beinhalten in der Regel jedoch nicht nur Attribute, sondern auch Methoden. Da wir auf Methoden in einem späteren Kapitel ausführlich zu sprechen kommen, möchten wir Sie bitten, die Methode in unserem Beispiel einfach hinzunehmen. Zum einfacheren Verständnis nennen wir diese hier daher auch nur methode. In der Praxis sollten natürlich aussagekräftige Methodennamen gewählt werden.
class Punkt // Deklaration der Klasse Punkt { int x_koordinate; /* x-Position unseres Punktes */ int y_koordinate; /* y-Position unseres Punktes */ // Anfang der Methode methode public void methode() { int lokale_variable; /* lokal deklarierte Variable ist nur innerhalb der Methode verwendbar */ } // Ende der Methode methode }
Wir haben nun unsere Klasse Punkt um eine Methode mit dem Namen methode erweitert. Innerhalb dieser Methode ist eine Variable lokale_variable deklariert. Diese Variable kann nur innerhalb dieser einen Methode verwendet werden. Die Variablen x_koordinate und y_koordinate sind hingegen auch in der gesamten Klasse verwendbar. Ein Variablenname sollte in einer Klasse nur einmalig vergeben werden.
Attribute können selber auch wieder komplexe Datentypen sein. Um dies zu verdeutlichen, erstellen wir die Klasse Linie:
class Linie // Deklaration der Klasse Punkt { Punkt punkt_eins; // gibt den ersten Punkt der Linie an Punkt punkt_zwei; // gibt den zweiten Punkt der Linie an }
Eine Linie definiert sich über zwei Punkte. Nun könnten wir theoretisch auch als Attribute vier Integer-Werte nehmen, um die Koordinaten der beiden Punkte abzubilden. Dies würde zwar auch seinen Zweck erfüllten, aber dies würde unserem objektorientierten Ansatz widersprechen.
Man unterscheidet unterschiedliche Arten von Variablen:
Die einfache Instanzvariable ist eine Variable, die direkt den Objekten einer Klasse (den sogenannten "Instanzen") zugeordnet ist und daher bei jedem Objekt dieser Klasse unterschiedliche Werte enthalten kann.
Folgendes Beispiel zeigt Ihnen die Deklaration der unterschiedlichen Variablen-Arten:
class VariablenArten { int x; // Instanzvariable static int y; // Klassenvariable // Methode Anfang void methode () { int z=0; // lokale Variable } // Methode Ende }
Beispiel 1:
class Beispiel { int variable1; }
Beispiel 2:
class Beispiel2 { int Variable_1; }
class Beispiel3 { Beispiel bsp; }
Beispiel 4:
Kleine Anmerkung zu diesem Beispiel: Hinter dem Methodennamen befindet sich in Klammern eine Variable, ein sogenannter Parameter der Methode. Diese kann als lokale Variable der Methode methode angesehen werden. Genauere Details werden in dem Kapitel Methoden näher erläutert.
class Beispiel4 { int variable_1; // Anfang der Methode methode public void methode(int val) { variable_1=val; } // Ende der Methode methode }
Beispiel 5:
class Beispiel5 { int variable_1; // Anfang der Methode methode public void methode(int val) { int variable_1=val; } // Ende der Methode methode }
Beispiel 6:
class Beispiel6 { // Anfang der Methode methode_1 public void methode_1(int val) { int variable_1=val; } // Ende der Methode methode_1 // Anfang der Methode methode_2 public void methode_2(int val) { int variable_1=val; } // Ende der Methode methode_2 }
class Beispiel4 { int variable_1; // Anfang der Methode methode public void methode(int val) { this.variable_1=val; } // Ende der Methode methode }
Die Verwendung der „this“-Referenz erleichtert auch das Lesen von Quellcode. Dadurch kann man direkt sehen, dass die Variable eine Instanzvariable ist und keine lokale Variable. Je größer und komplexer eine Klasse ist, desto wichtiger sind solche scheinbaren Kleinigkeiten für die Lesbarkeit des Codes.
Zur Unterscheidung der verschiedenen Variablenarten folgt nun ein weiteres Beispiel:
Beispiel 7:
Hier sei kurz erwähnt, dass die Variable hinter dem „return“ an den Aufrufer der Methode zurückgegeben wird. Nähere Details lernen Sie in dem Kapitel über Methoden.
class Beispiel7 { int variable_1=0; // Anfang der Methode methode_1 public int methode_1(int val) { variable_1=val; int variable_1=val; this.variable_1+=val; return this.variable_1; } // Ende der Methode methode_1 // Anfang der Methode methode_2 public int methode_2(int val) { int variable_1=val; return variable_1; } // Ende der Methode methode_2 }