Erste Schritte Verständnis Problem Konstruktoren

MrPii2

Mitglied
Hallo liebes Forum :)
Da ich zum nächsten Wintersemester ein Informatik Studium anstrebe, dachte ich es wäre doch an der Zeit sich schon einmal ein wenig ein zu lesen ;)

Nach ein wenig Recherche hielt ich das Buch "Jetzt lerne ich Java 7" für geeignet, mich in die Welt des Programmierens begeben.

Von der ersten Seite an fand ich die Erklärungen ansprechend und verständlich, auf erste Versuchen mit dem klassischen "Hallo Welt" folgten stehts Erfolge. Nach nun knapp 50 Seiten schleicht sich aber das erste "Häh" ein xD

Im genaueren geht es um diesen Code, der eine Mitarbeiter-Software, zur abfrage der Mitarbeiterdaten und eine Gehaltserhöhung, ermöglichen soll. Vorrangig dient er dem Verständnis von Klassen, Objekten und Konstruktoren :

Java:
class Mitarbeiter {
  String m_name;
  String m_vorname;
  int m_gehalt;
  
   Mitarbeiter(String name, String vorname, int gehalt) {
     m_name = name;
	 m_vorname = vorname;
	 m_gehalt = gehalt;
	 }
   
   void datenAusgeben() {
     System.out.println("\n");
	 System.out.println(" Name	   : " + m_name);
	 System.out.println(" Vorname  : " + m_vorname);
	 System.out.println(" Gehalt   : " + m_gehalt + "Euro");
	 }

   void gehaltErhoehen(int erhoehung) {
     m_gehalt += erhoehung;
	 }
}

public class Mitarbeiterbeispiel {
  public static void main(String[] args) {
  Mitarbeiter billy  = new Mitarbeiter("Gates","Bill",3000);
  Mitarbeiter stevie = new Mitarbeiter("Jobs","Steve",3500);


  billy.datenAusgeben();
  stevie.datenAusgeben();
  
  
  billy.gehaltErhoehen(500);
  
  billy.datenAusgeben();
  stevie.datenAusgeben();
  
  }
}

Ich würde mir nun kein vollkommenes Fehlverstehen dieses Quellcodes vorwerfen, vielmehr kämpfe ich mit dem Konstruktor "Mitarbeiter" :

Java:
   Mitarbeiter(String name, String vorname, int gehalt) {
     m_name = name;
	 m_vorname = vorname;
	 m_gehalt = gehalt;
	 }

Zu diesem Part finde ich die Erklärungen des Buches leider etwas dürftig. Zum einen wird nur erwähnt das in den Klammern hinter dem Namen des Konstruktors, Variablen einzufügen sind, welche aus anderen Klassen zur Bearbeitung mit einbezogen werden. Jedoch scheint es mit hier so als würden sie hier erst Deklariert.

Als zweites wird mir der Sinn der Zuweisung der Klassen (z.B: m_name = name) nicht klar, da die Klassen "name", "vorname" und die Variable "gehalt", im restlichen Quellcode nicht mehr vorkommen.

Ich hoffe ich konnte den Sachverhalt verständlich darstellen, und es ist ein wenig nachvollziehbar ^^

Geht nicht zu hart mit mir um, bin wie gesagt noch ein blutiger Anfänger :oops:

Bereits im vorhinein vielen Dank!

Grüße
Pii2
 

HimBromBeere

Top Contributor
Mit einem Konstruktor baust du ein Objekt auf. Jedes Objekt hat einen Satz Eigenschaften (Attribute genannt), die du zur Erzeugung des Objektes mit angibst (durch die Parameterliste im Konstruktor). Die Klasse Mitarbeiter hat z.B. die Eigenschaft name. Willst du nun einen neuen Menschen bauen, musst du ihm natürlich auch einen Namen mit auf den Weg geben:

Java:
Mensch m = new Mensch("Hans");
Java:
class Mensch {
    String _name;
    Mensch(String name) {
        _name = name;
    }
}
Damit gibst du dieser Instanz den gewünschten Namen und kannst ihn überall innerhalb der Klasse Mensch verwenden.

da die Klassen "name", "vorname" und die Variable "gehalt", im restlichen Quellcode nicht mehr vorkommen.
Das sind weiterhin keine Klassen, sondern Instanzen von Klassen, also konkrete Objekte (in dem Fall allerings recht "einfache" - nämlich Zeichenketten).

[EDIT]Damit wir nicht gleich von irgendjemandem auf die Mütze bekommen, weil wir die Java-Konventionen nicht eingehalten haben, vergessen wir auch ganz schnell, dass wir hier eine Variable _name erstellt haben und heucheln, dass wir sowas nie wieder tun :D [/EDIT]
 
Zuletzt bearbeitet:

njans

Top Contributor
Java:
   Mitarbeiter(String name, String vorname, int gehalt) {
     m_name = name;
	 m_vorname = vorname;
	 m_gehalt = gehalt;
	 }

Zu diesem Part finde ich die Erklärungen des Buches leider etwas dürftig. Zum einen wird nur erwähnt das in den Klammern hinter dem Namen des Konstruktors, Variablen einzufügen sind, welche aus anderen Klassen zur Bearbeitung mit einbezogen werden. Jedoch scheint es mit hier so als würden sie hier erst Deklariert.

Als zweites wird mir der Sinn der Zuweisung der Klassen (z.B: m_name = name) nicht klar, da die Klassen "name", "vorname" und die Variable "gehalt", im restlichen Quellcode nicht mehr vorkommen.

Erst einmal etwas zum CodeStil. Wird in dem Buch vorgeschlagen Instanzvariablen mit "m_" anzugeben? Das ist nämlich nicht das, was in Java gemacht werden sollte. Da man heutzutage vernünftige Entwicklungsumgebungen hat (BlueJay, Eclipse, Netbeans) werden diese eh farblich hervorgehoben. Daher das m_ lieber weglassen.

Was da passiert ist, dass du dem Konstruktor Parameter (name, vorname und gehalt) mit gibst (das sind keine Klassen, String ist eine Klasse, das sind nur Variablenbezeichnungen).
Ein Objekt der Klasse Mitarbeiter hat interne Variablen:name, vorname, gehalt. Diese werden dann, wenn ein Objekt erstellt wird (mittels new Mitarbeiter(...)) mit werten belegt.
Wenn du einem Objekt keinen Wert zuweist, initialisiert Java es mit null (bei Zahlen entsprechend 0). Um den Zustand (die internen Variablen) von Anfang an zu setzten, übergibst du dem Konstruktor die 3 Parameter, welche dann die internen Variablen (Instanzvariablen) auf den jeweilig zugewiesenen Wert setzen:
Java:
         m_name = name;
	 m_vorname = vorname;
	 m_gehalt = gehalt;


[EDIT]
Auch das, was HimBromBeere macht, sollte man in Java nicht machen:
_variable ist nicht gewollt. Präfixe werden bei Instanzvariablen von Java in den Konventionen extra angesprochen. Die Unterstrichnotation verwenden zwar einige Betriebe und Universitäten, diese sind aber eher ein Relikt aus alten Zeiten.

[/EDIT]
 
Zuletzt bearbeitet:

MrPii2

Mitglied
Vielen Dank für die Hilfreichen Beiträge!

Ich versuche das ganze jetzt mal so wieder zu geben wie ich es verstanden habe :D

Also :

Zunächst werden erstmal die Variablen der Klasse deklariert:

Java:
class Mitarbeiter {
  String m_name;
  String m_vorname;
  int m_gehalt;

diese sind ja für alle Methoden nutzbar.

Mit dieser Zeile des Konstruktors werden zunächst Lokale Variablen innerhalb des Konstruktors "Mitarbeiter" deklariert

Java:
Mitarbeiter(String name, String vorname, int gehalt) {

Der Code
Java:
Mitarbeiter billy  = new Mitarbeiter("Gates","Bill",3000);
legt dann durch den Konstruktor ein Objekt "billy" an was durch die Werte in der Klammer folgende Zuteilung bekommt:

name = Gates
vorname = Bill
gehalt = 3000

aber da diese ja nur Lokale Variablen sind, werden sie mit
Java:
     m_name = name;
	 m_vorname = vorname;
	 m_gehalt = gehalt;

in die Membervariablen der Klasse "Mitarbeiter" geschrieben, damit die Methode "datenAusgabe" darauf zugriff hat und diese Ausgeben kann.

Hoffentlich nicht totaler Blödsinn ^^
 

AquaBall

Top Contributor
PS: Gewöhn dir gleich die korrekten Variablennamen an.
Schau dir dazu an.
Das scheint in deinem Buch nicht optimal zu sein.

Underlines sind verpönt.
Präfix ist nicht nötig
Zusammengesetze Worte in CamelCase.
Java:
class Mitarbeiter {
  String nachName;
  String vorName;
  int gehalt;

  Mitarbeiter(String newNachName, String newVorName, int newGehalt) {
// Dieses 'new' mach ich halt, ist aber Geschmacksache, Es geht ums Prinzip.)
     this.nachName = newNachName;
     this.vorName = newVorName;
     this.gehalt = newGehalt;
  }
...
 
Zuletzt bearbeitet:

MrPii2

Mitglied
Nö, total richtig :D

Find ich gut ;)

Mir bleibt dann noch eine Frage:
Wenn ich nun aber den Mitarbeiter "billy" erstellt habe:

Java:
public class Mitarbeiterbeispiel {
  public static void main(String[] args) {
  Mitarbeiter billy  = new Mitarbeiter("Gates","Bill",3000);
  Mitarbeiter stevie = new Mitarbeiter("Jobs","Steve",3500);


  billy.datenAusgeben();
  stevie.datenAusgeben();

und dieser dann in die Variablen

Java:
class Mitarbeiter {
  String m_name;
  String m_vorname;
  int m_gehalt;

geschrieben wird, müsste dieser dann nicht wieder überschrieben werden, in dem Moment wo "stevie" erstellt wird?
 

AquaBall

Top Contributor
Mir bleibt dann noch eine Frage:
Wenn ich nun aber den Mitarbeiter "billy" erstellt habe:
und dieser dann in die Variablen
geschrieben wird, müsste dieser dann nicht wieder überschrieben werden, in dem Moment wo "stevie" erstellt wird?

Nein, weil durch
Code:
new Mitarbeiter()
neue Instanzen erstellt werden.
Das ist der Sinn von OOP! (und von programmieren)

Die Klasse beschreibt nur ein Objekt, das du dann beliebig oft erzeugen kannst, mit jeweils eigenen Speicherbereichen und Werten.
 
Zuletzt bearbeitet:

MrPii2

Mitglied
OOOkay,

durch den Befehl
Java:
Mitarbeiter billy  = new Mitarbeiter("Gates","Bill",3000);

wird also das neue Object "billy" mit den o.g. Variablen in der Klasse "Mitarbeiter" erzeugt.

welches der "Mitarbeiter" also entweder das links oder rechts von dem =, bezieht sich denn nun auf die Klasse, und welches auf den Konstruktor?

Oder müssen Klassen und konstruktor immer die selben Namen tragen ?
 

HimBromBeere

Top Contributor
Oder müssen Klassen und konstruktor immer die selben Namen tragen ?
Genau so is es.
wird also das neue Object "billy" mit den o.g. Variablen in der Klasse "Mitarbeiter" erzeugt.
Es wird eine neue Instanz der Klasse Mitarbeiter erstellt (
Code:
new Mitarbeiter(...)
) und diese wird mittels des Zuweisungsoperators eine Referenz zugeordnet, also ein Namen, mit der man an dieses Objekt rankommt.
 
Zuletzt bearbeitet:

Fab1

Top Contributor
Hier legst du eine Referenz auf den Typ Mitarbeiter mit dem Variablennamen "billy" fest. Damit du später mit dem Objekt etwas machen kannst.
Java:
Mitarbeiter billy

Und hier
Java:
new Mitarbeiter("Gates","Bill",3000);
erzeugst du eine neue Instanz/ neues Objekt der Klasse Mitarbeiter. Die Parameter werden dem Objekt übergeben.

Anfangs ist der Typ des Objektes und die erzeugte Instanz gleich, später wird sich hier mit Polymorphie etwas ändern, aber das musst du anfangs mal nicht beachten.

wird also das neue Object "billy" mit den o.g. Variablen in der Klasse "Mitarbeiter" erzeugt.

Es wird ein neues Objekt mit dem Variablennamen "billy" von der Klasse "Mitarbeiter" erzeugt und nicht in der Klasse "Mitarbeiter" ;)

[EDIT]zu spät ;([/EDIT]
 

njans

Top Contributor
OOOkay,

durch den Befehl
Java:
Mitarbeiter billy  = new Mitarbeiter("Gates","Bill",3000);
Typ VariablenNamen = ObjektDesTyps;
Das wäre hier der Aufbau.
Klassen sind in Java Typen. Dabei ist jede Klasse wie ein Bauplan, der beschreibt, wie ein Objekt von ihm auszusehen hat (Zustand, sprich die internen Variablen) und was es kann (Methoden).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
M If Verständnis Problem Java Basics - Anfänger-Themen 2
J Verständnis Problem Java-Listener. Java Basics - Anfänger-Themen 59
vodkaz For Schleife Verständnis Problem Java Basics - Anfänger-Themen 4
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
R RandomAccessFile verständnis Problem Java Basics - Anfänger-Themen 10
J Compiler-Fehler Verständnis Problem bei Compiler-Warning Java Basics - Anfänger-Themen 7
S Timer / Schleifen Verständnis Problem Java Basics - Anfänger-Themen 3
U ADT verständnis Problem Java Basics - Anfänger-Themen 18
S Java Verständnis Problem Methoden etc. Java Basics - Anfänger-Themen 22
P Codeschnipsel Verständnis Problem (Array) Java Basics - Anfänger-Themen 6
J Verständnis Problem mit return --> Klausuraufgabe Java Basics - Anfänger-Themen 4
F (Verständnis)Problem: Zahl auf 2 Nachkommastellen runden Java Basics - Anfänger-Themen 5
B Exception verständnis Problem Java Basics - Anfänger-Themen 2
M Verständnis-Problem Java Basics - Anfänger-Themen 4
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
KogoroMori21 Polymorphie-Verständnis Java Basics - Anfänger-Themen 5
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
T Methoden Verständnis Java Basics - Anfänger-Themen 14
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
K nur für das verständnis Java Basics - Anfänger-Themen 3
B Verständnis Frage zu der Aufgabe Java Basics - Anfänger-Themen 30
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
J Code Verständnis Java Basics - Anfänger-Themen 9
Y MVC MouseEvent Verständnis Java Basics - Anfänger-Themen 24
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
D Hilfe bei Verständnis von Aufgabe Java Basics - Anfänger-Themen 1
I Verständnis Frage wegen einer Aufgabe Java Basics - Anfänger-Themen 10
P verständnis Frage Refernzen und Objekte Java Basics - Anfänger-Themen 1
S Verständnis - Frage mehrere SQL Statements in While Schleife Java Basics - Anfänger-Themen 0
J java syntax verständnis Java Basics - Anfänger-Themen 6
M Verständnis von Deadlocks Java Basics - Anfänger-Themen 2
C Klassen/Objekte Verständnis Java Basics - Anfänger-Themen 8
O Singleton Verständnis Java Basics - Anfänger-Themen 4
C Allgemeines Verständnis For-Schleife Java Basics - Anfänger-Themen 3
R Input/Output MVC - Frage zum Verständnis Java Basics - Anfänger-Themen 5
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Musterlösung Verständnis Frage zu Math.abs() Java Basics - Anfänger-Themen 5
X Kompilat verständnis Frage Java Basics - Anfänger-Themen 9
C Input/Output Anfänger Array-Verständnis Frage Java Basics - Anfänger-Themen 7
H Überladen Verständnis Java Basics - Anfänger-Themen 3
E Verständnis zu einem Rekursionsbeispiel Java Basics - Anfänger-Themen 12
F Verständnis Frage - && Java Basics - Anfänger-Themen 2
O Frage zu Verständnis von Collection Java Basics - Anfänger-Themen 4
JavaKaffee Minimax-Algorithmus Verständnis Java Basics - Anfänger-Themen 12
C Methoden Frage zu Verständnis eines Beispiels Java Basics - Anfänger-Themen 3
M Polymorphie Cast:Verständnis und Ausführung Java Basics - Anfänger-Themen 10
M Verständnis Frage Java Basics - Anfänger-Themen 11
M Verständnis-Probleme mit eigenen Klassen Java Basics - Anfänger-Themen 2
T Verständnis von "final" und "static" Java Basics - Anfänger-Themen 6
F ArrayList() Verständnis Java Basics - Anfänger-Themen 14
M Verständnis von PrintWriter Java Basics - Anfänger-Themen 12
M Verständnis einiger Zeilen Java Basics - Anfänger-Themen 4
F Groovy Verständnis ConfigSlurper Java Basics - Anfänger-Themen 7
H Verständnis Strategy Pattern Java Basics - Anfänger-Themen 4
A Dringende Bitte um Erklärungen zum besseren Verständnis Java Basics - Anfänger-Themen 4
deimosmuc Hilfe zum Verständnis bei Vererbung Java Basics - Anfänger-Themen 11
T Verständnis-Frage Java Basics - Anfänger-Themen 2
E Verständnis frage zum return wert eines Arrays Java Basics - Anfänger-Themen 7
S Frage zu Verständnis und Logik Java Basics - Anfänger-Themen 5
P Verständnis bzgl. MVC Java Basics - Anfänger-Themen 11
M Klassen und Objekte => richtiges Verständnis? Java Basics - Anfänger-Themen 6
V KSKB zum Verständnis von Graphics und paintComponent Java Basics - Anfänger-Themen 6
A Array Verständnis Frage Java Basics - Anfänger-Themen 4
L Hashtable Verständnis Frage Java Basics - Anfänger-Themen 4
H Verständnis: Methode Java Basics - Anfänger-Themen 2
Z Verständnis Java Basics - Anfänger-Themen 4
R Verständnis Java Basics - Anfänger-Themen 4
R Verständnis bei Listen Java Basics - Anfänger-Themen 2
R Verständnis Klassen Java Basics - Anfänger-Themen 9
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben