Aufbau einer Klasse - Erzeugung einer Instanz

Status
Nicht offen für weitere Antworten.
B

bygones

Gast
Tobias hat gesagt.:
Eine Klasse schaut wie folgt aus:

Sie hat einen Kopf:
Code:
public class Name


public Der Zugriffsspezifizierer - ist im Moment eher unwichtig
class Das Schlüsselwort class
Name Dein selbstdefinierter Name für die Klasse, der Java-Konvention folgend immer mit einem Großbuchstaben beginnend.

Auf den Kopf folgt in geschweiften Klammer der Rumpf, welcher immer mindestens eine Methode enthält - sogar wenn man diese spezielle Methode nicht ausdrücklich hinschreibt.
Diese Methode ist der Konstuktor und muss immer genauso heißen, wie die Klasse selbst - in unserem Fall also Name().

Code:
public Name() {  }

Wenn du eine neue Instanz einer Klasse anlegen willst - oder anders benannt: ein neues Objekt erstellst - so mußt du den Konstruktor aufrufen, was genauso aussieht, wie ein normaler Methodenaufruf, also bei uns:

Code:
Name objektVariable = new Name();

Man kann in einem Konstruktor auch Parameter angeben - z.B. um Variablen zu initialisieren. Auch da funktioniert der Aufruf genau wie bei einer normalen Methode:

zum Beispiel:
Code:
Name objektVariable = new Name("Tobias", "D.");

Der Konstruktor sieht dann so aus:

Code:
public Name(String vorname, String nachname)  {
    // mach irgendwas mit den Argumenten...
    }

Damit man wie oben vorgeschlagen, Variablen (typischerweise Intanzvariablen, also Variablen, die im ganzen Objekt bekannt sind) initialisieren kann, müssen natürlich erst mal Variablen vorhanden sein. Instanzvariablen schreibt man üblicherweise an den Anfang der Klasse, also direkt unter den Kopf.

Instanzvariablen sehen so aus:
Code:
public String vorname;
public String nachname;

oder allgemein geschrieben [Zugriffsspezifizierer] Typ Name; -> also ein optionaler Zugriffsspezifizierer, der uns nicht weiter interessieren soll, der Variablentyp und der Name der Variablen, der nach Javakonvention immer mit einem Kleinbuchstaben beginnt. Abgeschlossen wird das Ganze natürlich mit einem Semikolon.

Dann wollen wir mal unseren Konstruktor erweitern, dass er diese Variablen initialisiert:

Code:
public Name(String vorname, String nachname) {
    this.vorname = vorname;
    this.nachname = nachname;
    }

Soweit ganz einfach - bis auf this! Was hat denn das da verloren?
Auch das ist eigentlich einfach: Woher soll der Compiler wissen, welche Variable vorname im obigen Konstruktor vor dem Gleichheitszeichen steht und welche dahinter? Es gibt ja zwei davon - eine, die im ganzen Objekt bekannt ist und eine, die als Argument übergeben wurde...
Hier kommt this ins Spiel. Es ist ein Verweis auf das eigene Objekt, also quasi der Hinweis für den Compiler, das die nun folgende Variable die ist, die im ganzen Objekt bekannt ist.

Es ist übrigens nicht notwendig, dass man Argument und zu initialisierende Instanzvariable gleich benennt - es schafft aber bessere ßbersicht und nimmt einem das lästige Finden guter Variablennamen zum Gutteil ab ;).

Siehe auch: Zu Zugriffsspezifizierern: http://www.java-forum.org/de/topics/java_1546.html (broken link)

mpG
Tobias

// EDIT: Kaputten Link markiert
 
Status
Nicht offen für weitere Antworten.

Oben