Standard Erzeugen einer Klasse aus der Klassenbibliothek

Objektorientierte Programmiersprache auf Basis einer virtuellen Maschine (https://www.oracle.com/java/)
mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Standard Erzeugen einer Klasse aus der Klassenbibliothek

Beitrag von mfro » Mi Jun 17, 2015 7:43 am

paul1234 hat geschrieben:ok, ich denke mal ich hab's begriffen
Du magst es begriffen haben, aber erklärst es mit falschen Begriffen:
¹.

Code: Alles auswählen

ClassA xyz
//definiert ein Objekt (eine Ableitung von Klasse 'ClassA' mit dem Namen 'xyz'
Nochmal: mit "Ableitung" hat das nichts zu tun. Eine Ableitung meint in Verbindung mit objektorientierten Sprachen üblicherweise die Definition einer neuen Klasse mit Eigenschaften der Elternklasse und zusätzlichen, neuen Eigenschaften der abgeleiteten Klasse. "Ableitung" solltest Du dir verkneifen, sonst kommst Du später bei der Vererbung durcheinander.

Das Statement definiert lediglich eine Variable, die entweder eine Referenz auf eine Instanz der Klasse ClassA oder null enthalten kann. Hier speicherst Du sozzusagen dein Ende einer Schnur, die die Referenz zur Objektinstanz darstellt.

Läßt Du die Schnur los, merkt das der Garbage Collector und schmeißt die Objektinstanz in seinem nächsten Aufräum-Durchgang weg.

Code: Alles auswählen

    ClassA xyz = new ClassA();
Nehmen wir das mal auseinander. ClassA xyz ist dasselbe wie oben: Speicherplatz für dein Schnurende. new erzeugt ein Objekt der Klasse ClassA und ruft gleich den Konstruktor ClassA() auf, der das Objekt ausstaffiert. Das resultierende Schnurende hältst Du in xyz fest, damit Du später dran ziehen und mit der Objektinstanz wackeln kannst.

Zu deiner letzten Frage: man kann ein Objekt instanziieren, ohne die Referenzvariable abzuspeichern, aber das hat (außer in ganz speziellen Fällen) keinen Nutzen:

Code: Alles auswählen

new ClassA();
Dabei wird das Objekt instanziiert und der Konstruktor aufgerufen. Das Objekt wird komplett instanziiert und initialisiert, "Dein" Schnurende wird erzeugt, aber Du läßt es gleich wieder fallen (weil nicht gespeichert). Der Garbage Collector wird das gleich anschließend wieder wegwerfen (weil er merkt, daß Du offensichtlich nicht mehr an dem Objekt interessiert bist).
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Standard Erzeugen einer Klasse aus der Klassenbibliothek

Beitrag von Xin » Mi Jun 17, 2015 10:29 am

paul1234 hat geschrieben:ok, ich denke mal ich hab's begriffen. auch wenn der ursprüngliche Threadtitel nicht optimal gewählt wurde. Oder ich hätte dann irgend wann einen neuen Thread mit dem Titel 'Erschaffung + Benutzung von Objekten' aufmachen müssen.
mit gerafft meine ich:
¹.

Code: Alles auswählen

ClassA xyz
//definiert ein Objekt (eine Ableitung von Klasse 'ClassA' mit dem Namen 'xyz'
Ich weiß nicht, was Du begriffen hast, jedenfalls verwendest Du Begriffe in einer Form, die nicht darauf schließen lassen. Eine Ableitung ist eine Spezialisierung einer Klasse. So wie ein Hund eine Ableitung eines Tieres ist. Hund ist Tier, aber Tier ist nicht zwangsläufig Hund.

classA xyz definiert eine Referenz. Es definiert keine Klassen oder Klasseninstanz.
paul1234 hat geschrieben:2.

Code: Alles auswählen

ClassA xyz = new ClassA();
//hier wird aus dem Objekt eine Refernzvariable, die auf den Speicherort der Daten, die das Objekt erhält, zeigt
ist das so jetzt ok?
Jain... xyz bleibt eine Referenz, nur zeigt sie jetzt auf eine Klasseninstanz, statt auf null. Der Referenz wird zugewiesen. In C++ würde man von "initialisiert" sprechen. In Java wird eine Referenz aber grundsätzlich mit "null" initialisiert - entsprechend hat der Programmierer semantisch nicht die Chance eine Variable als erster zu beschreiben.
paul1234 hat geschrieben:Und sind euch Situationen bekannt, in denen es zwar zur Ableitung eines Objektes (1.), aber nicht zur Initialisierung der Referenzvariablen (2.) kommt?
Klar, wenn eine Klasse Member hat, die sie in ihrem gegenwärtigen Zustand nicht braucht, dann bruacht man sie auch nicht mit Objekten zu belegen. Initialisiert sind sie in Java ja.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

paul1234
Beiträge: 13
Registriert: Di Jun 02, 2015 6:16 am

Re: Standard Erzeugen einer Klasse aus der Klassenbibliothek

Beitrag von paul1234 » Sa Jun 20, 2015 6:47 am

also auch wenn ich hier total nerve, ist es mir immer noch nicht klar, wo am verlinkten Beispiel der Namen des Objektes liegt: https://www.teialehrbuch.de/Kostenlose- ... ablen.html
class Konto -> Konto ist die Klasse
Konto konto1 = new Konto();
Konto konto2 = new Konto();
konto1 + konto2 ist der Name von Objekten oder Referenzvariablen?

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Standard Erzeugen einer Klasse aus der Klassenbibliothek

Beitrag von mfro » Sa Jun 20, 2015 7:16 am

Die Antwort darauf gibt das verlinkte Beispiel, im letzten Satz. Besser kann ich es nicht erklären.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

paul1234
Beiträge: 13
Registriert: Di Jun 02, 2015 6:16 am

Re: Standard Erzeugen einer Klasse aus der Klassenbibliothek

Beitrag von paul1234 » Sa Jun 20, 2015 10:04 am

Es geht nicht um den funktionalen Unterschied zwischen Objekt u.Refernzvariable, sondern um deren Namen.
konto1 + konto2 ist der Name der Refernzvariablen, welches auf das Objekt zeigt das durch Konto initialisiert wurde. Das Objekt hat keinen Namen. Könnte man so sagen?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Standard Erzeugen einer Klasse aus der Klassenbibliothek

Beitrag von Xin » Sa Jun 20, 2015 12:54 pm

paul1234 hat geschrieben:also auch wenn ich hier total nerve, ist es mir immer noch nicht klar, wo am verlinkten Beispiel der Namen des Objektes liegt: https://www.teialehrbuch.de/Kostenlose- ... ablen.html
class Konto -> Konto ist die Klasse
Konto konto1 = new Konto();
Konto konto2 = new Konto();
konto1 + konto2 ist der Name von Objekten oder Referenzvariablen?
konto1 und konto2 sind Namen von Referenzvariablen. Mit dem "."-Operator greifst Du dann über die Referenz auf das Objekt zu.

Vielleicht zur Verdeutlichung.

Code: Alles auswählen

class Konto -> Konto ist die Klasse
Konto konto1 = new Konto();
Konto konto2 = konto1;
konto1 und konto2 sind zwei unterschiedliche Referenzenvariablen. Aber sie beide referenzieren halt ein quasi namensloses Objekt. Entweder das identische oder halt unterschiedliche wie in Deinem Beispiel.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

paul1234
Beiträge: 13
Registriert: Di Jun 02, 2015 6:16 am

Re: Standard Erzeugen einer Klasse aus der Klassenbibliothek

Beitrag von paul1234 » Sa Jun 20, 2015 1:46 pm

Xin hat geschrieben: Aber sie beide referenzieren halt ein quasi namensloses Objekt.
Und genau das war die Antwort, die ich gesucht habe. Danke!

Antworten