Verständnisfrage zu Instanzen/Objekten

peter420

Mitglied
Liebe Java-Experten,

Ich habe eine Schiffssimulation mit GUI, die nun endlich einwandfrei funktioniert. Nur so ganz verstehen tu ich nicht was da passiert 😳

Ich habe eine Klasse "Bootsimulator", die mir 3 Typen von Schiffen erzeugt, z.B:
Java:
public Segler getSegler() {
		Segler segler = new Segler();
		segler.setKanonenAnz(4);
		segler.bewegen();
		segler.angreifen();
		return segler;
	}
in der Methode instanziere ich praktisch die Klasse "Segler", setze die Kanonenanzahl und rufe die Methoden bewegen() und angreifen() der Klasse "Segler" auf. Dann gebe ich mit "return" das Objekt "segler" zurück - ist meine Logik korrekt?

Dann habe ich die Klasse "GUI", die Buttons für jeden Schiffstyp enthält, die man klicken kann. In der "GUI" deklariere ich am Anfang die Variable
Java:
private Segler segler;
Dann kommt noch folgendes (außer den GUI-Elementen):
Java:
class ButtonListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
				segler = simulator.getSegler();
				label.setText(segler.bewegen() + "\n" + segler.angreifen());
				label.setIcon(seglerbild);
			}
	}
Frage: Was mache ich genau, wenn ich am Anfang schreibe "private Segler segler" - ich lege eine Variable segler vom Objekt Segler an?? Ist das korrekt?
Im Listener weise ich der Variable "segler" mit "segler = simulator.getSegler();" das instanzierte Objekt aus meiner Methode "getSegler()" zu, das ist mir wieder klarer.

Sind meine Überlegungen so klar/nachvollziehbar?

Vielen Dank für eure Hilfe nochmals!
Peter
 
wenn du am anfang schreibst private Segler segler dann erzeugst du eine variable vom typ Segler. Genauso wie es halt Variablen vom Typ String oder int gibt so gibt es auf welche vom Typ Segler. Diese Variable ist aber eine Klassenvariable, da sie nicht in ieiner methode oder so erzeugt waden sondern mittn in der klasse uns somit kann von überall in der klasse darauf zugegriffen werden. Wenn du die variable erzeugst hat sie aber erstmal den Wert null, d.h. sie is komplett leer. Später weißt du ihr dann einen wert zu, nämlich den wert eines Seglers, den du von der methode getSegler() bekommst, die ihn erzeugt und verschiedene methoden aufruft
 
Hallo Java Freak,

vielen Dank für die Erklärungen! Wird alles ein bissl klarer für mich - ich les mir in meinem "schlauen" Java-Buch noch was zu Klassenvariablen durch, kann ja auch nicht schaden.

Schöne grüße,
Peter
 
also wenndu private oder public und dann einen datentyp und danach einen namen hinschreibst erzeugst du immer eine variable.

zb:

Java:
private JButton button1;

Erzeugt ein Objekt mit dem Namen button1 des Datentyps JButton auf privater ( nur für diese klasse zugänglicher ) Ebene.

Ansonsten wurde ja alles erklärt 🙂
 
Ich misch mich auch mal ein und werf den Klugscheisser-Mode an 😉
Bitte nich übel nehmen, aber gerade bei Anfängern können kleine Falschaussagen schnell zu groben Verständnisfehlern führen...

Diese Variable ist aber eine Klassenvariable

Das ist nicht richtig, das ist eine Instanzvariable.
Klassenvariablen sind statisch. Der Unterschied zwischen Instanz- und Klassenvariablen ist enorm.

Code:
private JButton button1;
Erzeugt ein Objekt mit dem Namen button1 des Datentyps JButton auf privater ( nur für diese klasse zugänglicher ) Ebene.

Auch das stimmt nicht, hier wird lediglich eine Variable angelegt.
Der Inhalt der Variablen ist zu diesem Zeitpunkt
Code:
null
, also nichts. Kein Objekt.
Objekte erzeugt man mit dem new-Operator, bzw. im speziellen Fall des Datentyps String
auch mit einer Direktzuweisung eines String-Literals.

Klugscheiss-Mode OFF.
lg 😀
 
Zuletzt bearbeitet:
Och, so klugscheißerisch finde ich das gar nicht. Im Gegenteil. Ich hatte den Eindruck, dass genau diese "Ungenauigkeit" eine der Ursachen für die Frage war. Wenn man sowas hat wie
Java:
private JButton startButton = new JButton("Beenden");
dann sagt (oder denkt) man manchmal so vor sich hin: "Joa, startButton ist ein Button" (im Sinne von: "...ist ein Button-Objekt"), aber nur weil es halt auf Dauer lästig-krampfig wird, zu sagen (oder zu denken): "startButton ist eine Referenztyp-Instanzvariable vom Typ 'JButton', deren Wert eine Referenz auf einen JButton ist" :autsch: Aber zumindest sollte man SO lange diese krampfig präzise Formulierung verwenden (oder eine angemessen vereinfachte Variante) bis es nicht mehr nötig ist.

Sorry. Du wirst also deine gesamten Tutorial-Videos mit obiger Formulierung nachsynchronisieren müssen 🙁

:joke:
 
Sorry. Du wirst also deine gesamten Tutorial-Videos mit obiger Formulierung nachsynchronisieren müssen.

I don't think so 😛ueh: Zeig mir ein Bsp aus meinem Kurs wo ich eine Variable mit null-Referenz als Objekt bezeichne. Vorallem bevor ich erklärt habe was ein komplexer Datentyp ist und was so eine Variable genau abspeichert.

Und selbst wenn du eins findest - ich nehm grad eh nen komplett neuen Kurs auf 😀
 
ja gut , ich muss zugeben ich war gestern nacht nicht mehr ganz so bei der sache , danke für die korrekturen 🙂
 

Zurück
Oben