Objekte/Klassen erstellen - Erklärung anhand Beispiel

Vokabulator

Mitglied
Hallo!

Ich hab gerade mein erstes Java-Buch gelesen und haben nun eiene Frage zu den Klassen und Objekten. Eine Aufgabe in dem Buch lautet:

1. Definieren Sie eine Klasse Mitarbeiter. Ein Mitarbeiter besitzt
eine eindeutige Nummer (id) und einen Namen (name). Die ID des
Mitarbeiters soll durch die Klasse selbst fortlaufend nummeriert
werden. Der erste Mitarbeiter hat also die ID 1, der zweite Mitarbeiter
die ID 2 usw. Fügen Sie der Klasse sinnvolle get- und set-
Methoden hinzu und definieren Sie zudem eine toString()-Methode,
die die ID und den Mitarbeiternamen als String zurückliefert.

Die Lösung lautet:

Java:
public class Mitarbeiter {
private static int MAX_ID = 1;
private int id;
private String name;
public Mitarbeiter(String name) {
id = MAX_ID++;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return id + ", " + name;
}
}

Das würde ich nun gerne entschlüsseln.
Java:
public class Mitarbeiter
-> definiert die Klasse mitarbeiter als public, d.h. die Zugriffsrechte sind eben public

Java:
private static int MAX_ID = 1;
-> legt ein privates statisches Objekt (eine Variable) fest und gibt ihr den Wert 1 - ist das richtig so? Die Variable ist das Objekt?

Java:
private int id;
private String name;
-> Hier ebenso, zwei Objekte (Variablen) werden festgelegt?


Java:
public Mitarbeiter(String name) {
id = MAX_ID++;
this.name = name;
}
-> Ist ein Konstruktor? Hier verstehe ich noch nicht, was das im Einzelnen bedeutet. Wird mit this.name auf diese (this) Klasse zugegriffen und die Methode name angewandt?

Und den Rest verstehe ich auch nicht so genau. Das sind doch alles Funktionen, oder? Wo sind da die Objekte und Attribute?

Vielen Dank für etwaige Erklärungen!!
 
Du solltest das Buch zur Abwechslung einfach mal lesen. Das sind nämlich alles Fragen, die dort garantiert erläutert werden.
 
Das denke ich auch... Es sei denn, das ganze Ding besteht nur aus Aufgaben, was ich mir kaum vorstellen kann!?
 
Hallo,

Du verwechselt hier einiges. Ich werde mal versuchen dir das hoffentlich verständlich zu erklären:

Java:
private static int MAX_ID = 1;

Du hast hier kein Objekt. int ist ein primitiver Datentyp. Außerdem gibt es Java Konventionen welche besagen, dass Konstanten im "higher case" (Großbuchstaben) geschrieben werden. Eine Konstante ist ein immer gleichbleibender Wert, dieser sollte somit auch als final deklariert werden. (siehe auch: Java ist auch eine Insel – 6.5 Konstanten und Aufzählungen )

Java:
private int id;
private String name;
Hier das gleiche int ist ein primitiver Datentyp. String hingegen ist eine Klasse. Somit erzeugst du hier ein Objekt. Ein Objekt wird ja immer mit
Code:
new
erzeugt. Um dies bei String zu verkürzen wird diese Methode in der Regel weggelassen. Somit sind, soweit ich weiß, die beiden unten stehenden Codeteile identisch.

Java:
String test = "Hallo";
und
Java:
String test = new String("Hallo")

Intern behandelt Java die beiden Codeteile gleich.

Java:
public Mitarbeiter(String name) {
id = MAX_ID++;
this.name = name;
}


Das hier ist der Konstruktor der Klasse Mitarbeiter. Dieser erwartet einen Parameter ein String Objekt (name), welcher den Namen des Mitarbeiters repräsentieren soll.

Jetzt muss man unterscheiden es gibt Instanzvariablen und lokale Variablen. Instanzvariablen sind in der kompletten Klasse gültig und lokale Variablen nur in deren Gültigkeitsbereich. mit
Code:
this
wird die Instanzvariable angesprochen. Denn in diesem Fall gibt es eine Instanzvariable und eine lokale Variable welche den Namen "name" tragen. Und damit der Compiler weiß mit welcher du arbeiten willst, braucht er die Information.
 
Somit sind, soweit ich weiß, die beiden unten stehenden Codeteile identisch.

Java:
String test = "Hallo";
und
Java:
String test = new String("Hallo")

Intern behandelt Java die beiden Codeteile gleich.

Nicht ganz. Bei der unteren Variante wird immer ein neuer String angelegt, bei der oberen bedient sich Java ggf. aus dem String-Pool.

Das bedeutet, bei

Java:
String test1 = "Hallo";
String test2 = "Hallo";

könnte
Code:
test1 == test2
wahr ergeben, muss aber nicht. Bei

Java:
String test1 = new String("Hallo");
String test2 = new String("Hallo");

muss
Code:
test1 == test2
falsch ergeben.
 

Zurück
Oben