Initialisierung von Klassen-Objekte

Data2006

Mitglied
Guten Abend zusammen,

ich hätte ein paar Fragen. Ich habe ein Programm aufgeteilt in 2 Dateien (Main.java und Vektor.java).
Hier mal der Code - Main.java
Java:
public class Main {
public static void main(String[] args) {
Vektor vek = new Vektor();
Vektor vek2 = new Vektor();
        Vektor vek3;

vek.x = 3;
vek.y = 5;
vek.z = 2;

vek2.x = 4;
vek2.y = 6;
vek2.z = 1;

        vek3 = vek.add(vek, vek2);

System.out.println(vek3.x);
System.out.println(vek3.y);
System.out.println(vek3.z);
    }
}
und Vektor.java:
Java:
public class Vektor {
int x;
int y;
int z;
public Vektor add(Vektor a, Vektor b) {
Vektor ret = new Vektor();
ret.x = a.x+b.x;
ret.y=a.y+b.y;
ret.z=a.z+b.z;

return ret;
    }
}

Warum kann ich Vektor vek = new Vektor(); und Vektor vek2 = new Vektor(); schreiben, dann aber reicht ein Vektor vek3; ? Mache ich die ersten beiden Anweisungen ohne das new Vektor(), erhalte ich im IntelliJ IDEA 2024.2.4 (Community Edition) eine Fehlermeldung.

Ich lerne gerade Java mit YouTube The Morpheus Tutorials und Buch Java Von Kopf bis Fuß.

Müßte man nicht auch int x = new int(); schreiben?

Dankeschön.

LG
Heiko
 

Jw456

Top Contributor
Mit Vektor vek3; erstellst du erstmal nur die Variable weißt ihr noch nichts zu.
Du machst sie sozusagen erstmal bekannt.
Mit einem "=" machst du eine Wert Zuweisung das kommt bei dir ja erst in Zeile 15.
Und hier weißt du das in der Klasse Vektor erstellte Objekt der Variablen zu.
Die Methode add gibt ja genau ein Vektor Objekt Zurück.


Müßte man nicht auch int x = new int(); schreiben?
Nein da ist ein ptimitiver Datentyp kein Objekt. Der braucht kein new.
 
Zuletzt bearbeitet:

Data2006

Mitglied
Hmmm... ok. So ganz habe ich es nicht verstanden, aber nicht tragisch. Ich mache dann immer Vektor vek3=new Vektor(). Oder spricht da was gegen?
 

Data2006

Mitglied
Guten Morgen.

Ich habe das Programm bischen verändert:
Main.java:
Java:
public class Main {
public static void main(String[] args) {
Vektor v = new Vektor();
Vektor v2 = new Vektor();
v.x = 1;
v.y = 0;
v.z = 0;

        Vektor v3 = v.add(v2);

System.out.println("v3.x = " + v3.x);
System.out.println("v3.y = " + v3.y);
System.out.println("v3.z = " + v3.z);
    }
}

Vektor.java:
Java:
public class Vektor {
int x;
int y;
int z;

public Vektor add(Vektor a) {
Vektor ret = new Vektor();
ret.x = a.x + this.x;
ret.y = a.y + this.y;
ret.z = a.z + this.z;

return ret;
    }
}

Im Video wurde das mit this nicht gut erklärt. Kann mir jemand von Euch sagen wie das funktioniert?

Lieben Dank,
Heiko
 

mihe7

Top Contributor
Im Video wurde das mit this nicht gut erklärt. Kann mir jemand von Euch sagen wie das funktioniert?
Von einer Klasse können mehrere Instanzen (Objekte) erstellt werden und this steht einfach für das Objekt, auf dem die Methode aufgerufen wurde.

Nehmen wir mal folgenden Code an:
Java:
Vektor c = new Vektor();
Vektor d = new Vektor();
Vektor e = c.add(d);
Hier wird add auf dem Objekt aufgerufen, das mit der Variablen c referenziert wird. Wenn die Methode ausgeführt wird, verweist this auf eben dieses Objekt.

Meistens kann das this weggelassen werden. Angegeben werden muss es allerdings, wenn klargestellt werden muss, dass Instanzvariablen von this gemeint sind.

Beispiel:
Java:
public Vektor(Vektor orig) {
    x = orig.x; // oder this.x = orig.x;
    y = orig.y; // oder this.y = orig.y;
    z = orig.z; // oder this.z = orig.z;
}
Hier spielt es keine Rolle, ob man this angibt oder nicht. Es ist klar, dass mit x, y und z die Instanzvariablen des Objekts, das gerade initialisiert wird, gemeint sind.

Java:
public Vektor(int x, int y, int z) {
    this.x = x;
    this.y = y;
    this.z = z;
}
Hier muss das this zwangsweise angegeben werden, denn ohne diese Angabe werden die Parameter angesprochen.
 

Barista

Top Contributor
Im Video wurde das mit this nicht gut erklärt. Kann mir jemand von Euch sagen wie das funktioniert?
Erst mal ist this ein unsichtbarer Parameter von Methoden (außer im Konstruktor, da entsteht das Objekt this ja gerade erst), die keinen static-Modifier haben.

static-Methoden haben diesen unsichtbaren Parameter nicht.

this muss man angeben, um dieses implizite Objekt anzusprechen, wenn der jeweilige Name nicht eindeutig ist, wie in dem Konstruktor-Beispiel.

this kann man immer angeben, auch wenn es nicht notwendig ist, ist ein guter Stil.
 

Data2006

Mitglied
Moin.

Also this wird immer dann angelegt wenn eine Methode der Klasse aufgerufen wird?
In meinem Beispiel wird ja add Methode mit nur einem Parameter (v2) aufgerufen anstatt auch mit v..

LG und schönes WE
Heiko
 

Barista

Top Contributor
Also this wird immer dann angelegt wenn eine Methode der Klasse aufgerufen wird?
In meinem Beispiel wird ja add Methode mit nur einem Parameter (v2) aufgerufen anstatt auch mit v..
Puh.

this wird nicht angelegt, sondern ist bei nicht statischen Methoden und im Konstruktor vorhanden.

Mit unsichtbarer Parameter meine ich die Realisierung in Java unabhängig davon, was der Programmierer hinschreibt.

Hat also mit dem Parameter v2 nicht s zu tun.
 

Oneixee5

Top Contributor
Das Java this Schlüsselwort liefert nichts anderes als eine Referenz und zwar eine Referenz auf das Objekt, in dem man sich befindet. Genauer, eine Referenz auf den Speicherbereich, in dem das Objekt gespeichert ist. Eine Referenz kann man sich vorstellen wie eine Adresse, unter der wir den für ein Objekt reservierten Speicherbereich finden. Wenn man Objekte einer Variablen zuweist, dann weist man der Variable nicht den Inhalt des Objekts zu, sondern lediglich einen Verweis auf die Position im Speicher, an der es gespeichert ist. this ist also wie eine Variable um die man sich nicht selbst kümmern muss. Wenn es eine Instanz einer Klasse - also ein Objekt - gibt, dann existiert damit auch this in dem Objekt. Eine Instanz einer Klasse wird erzeugt, indem man einen Konstruktor mit dem Schlüsselwort new aufruft.
Alles was irgendwie "static" ist, Konstanten, Variablen, Methoden gehört zur Klasse oder Interface - nicht zum Objekt - und hat damit keinen Zugriff auf this.
 

Data2006

Mitglied
Ich hoffe ich habe es jetzt richtig verstanden. Ich fasse noch mal zusammen:
Code:
Vektor v = new Vektor();
Vektor v2 = new Vektor();
Hiermit lege ich jetzt jeweils eine Instanz der Klasse Vektor an. Sagen wir mal v = Speicherstelle 0x1000 und v2 = Speicherstelle 0x1200.
Code:
Vektor v3 = v.add(v2);
Wird hier mit v3 eine weitere Instanz angelegt?!
v.add, ich springe zur Speicherstelle 0x1000 und führe diese add-Methode aus. this sind dann Zeiger auf x, y und z der Instanz v.
add wird in Main.java mit dem Parameter v2 aufgerufen.

Wenn ich es richtig verstanden habe, könnte ich ja jetzt ein Programm/eine Klasse schreiben, mit der 2 Vektoren miteinander multipliziert werden?!

LG
Heiko
 

Oneixee5

Top Contributor
Allerdings benutzt man in Java den Begriff: Zeiger nicht. Es ist auch nicht identisch zu verwenden wie Zeiger in C.
In der add-Methode wird new Vector... aufgerufen und dieses neue Objekt wird auch zurückgegeben.
 

Data2006

Mitglied
Guten Morgen,

ich muß doch noch mal fragen, ich weiß nämlich nicht ob ich es endgültig verstanden habe.

Ich fange mal an. Eine Variable ist nur ein Platzhalter für irgendwelche Daten. Lege ich z. B. eine normale (elementare) Variable x an, dann wird für x doch eine Speicherstelle reserviert. Und an der Speicherstelle ein Wert von unterschiedlichen Datentypen (short, int, long, float usw.) abgelegt. Soweit richtig?

Bei der Referenzvariable (untgerschiedliche Datentypen) der Klasse xyz wird auch eine Speicherstelle reserviert. Nur wird an dieser Speicherstelle kein Wert gespeichert, sondern da steht dann eine Speicherstelle des Objekts der Klasse. In C++ wäre das dann ein Pointer/Zeiger. (Wobei *this ja auch ein Zeiger ist.)

Ich hoffe ich habe es verstanden, sonst frage ich mich ob es Sinn macht, bei Java überhaupt weiter zu machen. C++ habe ich auch schon nicht richtig verstanden.

Lieben Dank Euch,
Heiko
 

Data2006

Mitglied
Programmierung befasst sich mit der Frage, wie sich der Compiler verhält, wenn er im Quellcode auf ein Schlüsselwort (z.B. "this") (nicht) trifft. Alternativ kann man sich auch im Openbook informieren: Openbook zu this ( Kap. 6.1ff )

Moin.

Danke für den Link. Sehr umfangreich. Das Javabuch "Java ist auch eine Insel", habe ich mir mal gegönnt gehabt. Mir wurde nur in einem anderen Android-Forum gesagt daß das Buch nicht so gut wäre zum Lernen. Mir wurde zu Java Von Kopf bis Fuß geraten. Da probiere ich gerade durchzublicken.

LG
Heiko
 

Barista

Top Contributor
Ich fange mal an. Eine Variable ist nur ein Platzhalter für irgendwelche Daten. Lege ich z. B. eine normale (elementare) Variable x an, dann wird für x doch eine Speicherstelle reserviert. Und an der Speicherstelle ein Wert von unterschiedlichen Datentypen (short, int, long, float usw.) abgelegt. Soweit richtig?

Bei der Referenzvariable (untgerschiedliche Datentypen) der Klasse xyz wird auch eine Speicherstelle reserviert. Nur wird an dieser Speicherstelle kein Wert gespeichert, sondern da steht dann eine Speicherstelle des Objekts der Klasse. In C++ wäre das dann ein Pointer/Zeiger. (Wobei *this ja auch ein Zeiger ist.)

Ich hoffe ich habe es verstanden, sonst frage ich mich ob es Sinn macht, bei Java überhaupt weiter zu machen. C++ habe ich auch schon nicht richtig verstanden.

Es gibt verschiedene Speicherbereiche:

Stack: lokale Variable und Parameter von Methoden/Konstruktoren
bei jedem Methodenaufruf wird etwas aufgebaut und am Methoden-Ende wieder abgebaut

static: Wird beim Start des Programmes reserviert (in Java etwas spezieller: beim Laden einer Klasse) und bleibt bis zum Ende des Programmes bestehen.

Heap: Speicher für Objekte, wird dynamisch angefordert und wieder freigegeben.

Referenzvariable haben unter der Decke die Adresse auf dem Heap. In Java wird dies wohl ein Handle (eine Nummer) auf eine Objekt-Tabelle sein, damit die Objekte von der JVM verschoben werden können.

Die Referenzvariable selbst befindet sich wiederum auf dem Stack, im static-Bereich oder ist Teil eines Objektes auf dem Heap.

Java ist leichter zu lernen als C++, also hast Du hier eine bessere Chance, es zu verstehen.
 

Data2006

Mitglied
OK, es gibt verschiedene Speicherbereiche, aber alle haben doch eine Speicheradresse oder nicht? Mir gehts ja mehr um das Verständnis.

LG
Heiko
 

Data2006

Mitglied
Ich hätte hier aber noch ne andere Frage. Ich will Array Instanzen einer Klasse definieren und dann auf jedes Array-Element zugreifen:
Code:
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
System.out.println("                           V e k t o r e n b e r e c h n u n g");
System.out.println();
Scanner scan = new Scanner(System.in);
System.out.print("Wie viele Vektoren sollen multipliziert werden? ");
int anz = scan.nextInt();
System.out.println();
Vektor[] vek = new Vektor[anz];

for(int i=0; i < anz; i++) {
System.out.println("Geben Sie nun die Daten des " + (i+1) + ". Vektors ein: ");
System.out.print("x = ");
vek[i].x = scan.nextInt();
System.out.print("y = ");
vek[i].y = scan.nextInt();
System.out.print("z = ");
vek[i].z = scan.nextInt();
        }

System.out.println("Sie wollen also " + anz + " Vektoren miteinander multiplizieren!");

    }
}

Warum kann ich nicht auf vek.x zugreifen?
Mit dem .-Operator kann ich doch in C++ zugreifen. Habe ich hier eine falsche Syntax gewählt?

LG
Heiko
 

KonradN

Super-Moderator
Mitarbeiter
Wenn uns die genaue Fehlermeldung nicht mitteilst, dann kann man Dir keine genaue Antwort geben. Die Fehlermeldung selbst sollte die Antwort aber bereits beinhalten.

a) Compile Fehler ist möglich: Wie ist die Klasse Vektor geschrieben worden? Wurden x,y und z deklariert und wenn ja wie? Es gäbe ein Compile-Fehler, wenn es x, y, oder z nicht geben würde, der Typ falsch ist und daher kein int zugewiesen werden kann oder die Sichtbarkeit keinen Zugriff aus der Klasse Main erlauben würde.

b) Laufzeit Fehler: Du erstellst nur ein Array aus Vektoren. Das ist aber nur ein Array von Referenzvariablen und diese sind alle null. Beim Versuch, da zuzugreifen, bekommst Du eine NullPointerException. Du musst also in der for Schleife erst einmal neue Instanz von Vektor erzeugen.

Wichtiger Hinweis: Fehler a könnte vorliegen, b liegt aber auf jeden Fall vor.

Nur zur Erklärung: Stell Dir Variablen wie Zettel vor. int Variablen sind also ein Zettel, auf der nur eine Zahl steht (und zwar stehen muss!) Eine Referenz-Variable kann einen Hinweis enthalten, wo der entsprechende Inhalt zu finden ist (Stell Dir das von mir aus wie eine Adresse vor. Die genauen Details sind dabei egal!). So lange da aber noch keine Adresse drauf steht, kannst Du natürlich nicht zugreifen.
 

Data2006

Mitglied
Wenn uns die genaue Fehlermeldung nicht mitteilst, dann kann man Dir keine genaue Antwort geben. Die Fehlermeldung selbst sollte die Antwort aber bereits beinhalten.

a) Compile Fehler ist möglich: Wie ist die Klasse Vektor geschrieben worden? Wurden x,y und z deklariert und wenn ja wie? Es gäbe ein Compile-Fehler, wenn es x, y, oder z nicht geben würde, der Typ falsch ist und daher kein int zugewiesen werden kann oder die Sichtbarkeit keinen Zugriff aus der Klasse Main erlauben würde.

b) Laufzeit Fehler: Du erstellst nur ein Array aus Vektoren. Das ist aber nur ein Array von Referenzvariablen und diese sind alle null. Beim Versuch, da zuzugreifen, bekommst Du eine NullPointerException. Du musst also in der for Schleife erst einmal neue Instanz von Vektor erzeugen.

Wichtiger Hinweis: Fehler a könnte vorliegen, b liegt aber auf jeden Fall vor.

Nur zur Erklärung: Stell Dir Variablen wie Zettel vor. int Variablen sind also ein Zettel, auf der nur eine Zahl steht (und zwar stehen muss!) Eine Referenz-Variable kann einen Hinweis enthalten, wo der entsprechende Inhalt zu finden ist (Stell Dir das von mir aus wie eine Adresse vor. Die genauen Details sind dabei egal!). So lange da aber noch keine Adresse drauf steht, kannst Du natürlich nicht zugreifen.

Fehlermeldung:
Code:
Exception in thread "main" java.lang.NullPointerException: Cannot assign field "x" because "vek[i]" is null
	at Main.main(Main.java:17)

Vektor.java:
Code:
public class Vektor {
    int x=0;
    int y;
    int z;

}

LG
Heiko
 

Barista

Top Contributor
Ja, da steht überall 0 drin, das ist mir bewußt. Erst in der for-Schleife werden die initialisiert.
Da steht nicht 0 drin, sondern null.

0 bedeutet ein primitiver Wert mit einem initialen Default-Wert.

null bedeutet, kein Objekt da.

Alle Objekte in Java werden mit new auf dem Heap angelegt.

Es gibt keine Objekte auf dem Stack wie in C++.
 

Barista

Top Contributor
Das ist in C++ dann aber einfacher geregelt. Da mache ich nur ein
Code:
class Vektor vek[anz];
und gut ist.
In diesem Falle sind die Objekte aber nicht polymorph (virtuell). Das geht in C++ nur mit Zeigern und Referenzen.

Dem Code sieht man das nicht unmittelbar an.

Dieses Problem wird Java mit den value Typen auch bekommen.

In C++ gibt es auch new, dort muss man sich aber mit delete auch selbst ums abräumen kümmern.

Ansonsten smart pointer, unique Referenzen und was es nicht noch alles gibt.

In Java sind eben Arrays auch Objekte und liegen immer auf dem Heap, insofern einfacher, weil es anders gar nicht geht. Heap ist aber auch immer langsamer als Stack. Aber auch in C++ ist der Stack begrenzt, da sollte man nicht zu viel reinpacken.
 

Data2006

Mitglied
Ich hätte hier aber noch ne andere Frage. Ich will Array Instanzen einer Klasse definieren und dann auf jedes Array-Element zugreifen:
Code:
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
System.out.println("                           V e k t o r e n b e r e c h n u n g");
System.out.println();
Scanner scan = new Scanner(System.in);
System.out.print("Wie viele Vektoren sollen multipliziert werden? ");
int anz = scan.nextInt();
System.out.println();
Vektor[] vek = new Vektor[anz];

for(int i=0; i < anz; i++) {
System.out.println("Geben Sie nun die Daten des " + (i+1) + ". Vektors ein: ");
System.out.print("x = ");
vek[i].x = scan.nextInt();
System.out.print("y = ");
vek[i].y = scan.nextInt();
System.out.print("z = ");
vek[i].z = scan.nextInt();
        }

System.out.println("Sie wollen also " + anz + " Vektoren miteinander multiplizieren!");

    }
}

Warum kann ich nicht auf vek.x zugreifen?
Mit dem .-Operator kann ich doch in C++ zugreifen. Habe ich hier eine falsche Syntax gewählt?

LG
Heiko
In Zeile 14 lege ich mit new eine Instanzvariable der Klasse Vektor an.
Warum dann noch mal vek(I) = new Vektor();; Da lege ich doch wieder eine Instanz der Klasse Vektor an.

Bei der Bildung einer Instwnzvariable wird doch nur ein Speicherplatz reserviert ne?

LG
Heiko
 

Barista

Top Contributor
In Zeile 14 lege ich mit new eine Instanzvariable der Klasse Vektor an.
Warum dann noch mal vek(I) = new Vektor();; Da lege ich doch wieder eine Instanz der Klasse Vektor an.
Ich nehme an, Du meinst Zeile 12:
Java:
Vektor[] vek = new Vektor[anz];

Damit legst Du das Array an.

Die einzelnen Elemente/Einträge im Array sind damit null.

Mit
Java:
vek[ i ] = new Vektor();
erzeugst Du ein neues Vektor-Objekt und vermerkst die Referenz im Array an der Position(Index) i.
 

Barista

Top Contributor
Das ist in C++ dann aber einfacher geregelt. Da mache ich nur ein
Code:
class Vektor vek[anz];
und gut ist.
Das ist wie Werkzeug aus China, billig, aber gleich kaputt.

Wenn Du C++ gut findest, dann befass Dich doch mal mit SFNIAE https://en.cppreference.com/w/cpp/language/sfinae :p

Oder vielleicht mit move semantic, rexpression usw.

Natürlich Speicherlecks vermeiden.

Mit Templates kann man einiges machen, was in Java nicht möglich ist, ist aber schwer zu beherrschen

Ich finde C++ furchtbar.
 

KonradN

Super-Moderator
Mitarbeiter
In einem anderen Thread habe ich ein bildliches Beispiel gebracht. Nimm eine Klasse Haus:

Haus meinHaus;
Dies erzeugt dann eine Adresskarte auf der die Adresse eines Hauses stehen kann. Diese Karte ist aber leer.
Ein Zugriff auf das Haus ist also nicht möglich und es ist noch keinerlei Haus gebaut worden.
Haus[] meineHaeuser = new Haus[10];
wären dann 10 Adresskarten, die alle leer sind und die keinerlei Adressen enthalten. Es wurde kein Haus gebaut.

new Haus();
Das baut ein Haus. Das ist also wirklich erst da Konstrukt, das ein Haus irgendwo entstehen lässt und dann die Adresse zurück gibt.

Haus meinHaus = new Haus();
Hier wird ein Haus gebaut und die Adresse wird direkt auf eine neue Adresskarte geschrieben.

Und wenn Du nun einen Kartenstapel von Adresskärtchen hast und du Da irgendwas machen willst, dann musst Du sicher stellen, dass da gültige Adressen sind. Und das kannst Du machen, in dem Du für jedes Kärtchen als erstes das entsprechende Haus baust.

Das ist so hoffentlich visuell vorstellbar.
 

Data2006

Mitglied
Ich nehme an, Du meinst Zeile 12:
Java:
Vektor[] vek = new Vektor[anz];

Damit legst Du das Array an.

Die einzelnen Elemente/Einträge im Array sind damit null.

Mit
Java:
vek[ i ] = new Vektor();
erzeugst Du ein neues Vektor-Objekt und vermerkst die Referenz im Array an der Position(Index) i.
Ok, ich lege ein Array an, das ist dann sozusagen die äußere Hülle, nicht wahr? Und vek dann der Innenteil.

LG Heiko
 

Data2006

Mitglied
In einem anderen Thread habe ich ein bildliches Beispiel gebracht. Nimm eine Klasse Haus:

Haus meinHaus;
Dies erzeugt dann eine Adresskarte auf der die Adresse eines Hauses stehen kann. Diese Karte ist aber leer.
Ein Zugriff auf das Haus ist also nicht möglich und es ist noch keinerlei Haus gebaut worden.
Haus[] meineHaeuser = new Haus[10];
wären dann 10 Adresskarten, die alle leer sind und die keinerlei Adressen enthalten. Es wurde kein Haus gebaut.

new Haus();
Das baut ein Haus. Das ist also wirklich erst da Konstrukt, das ein Haus irgendwo entstehen lässt und dann die Adresse zurück gibt.

Haus meinHaus = new Haus();
Hier wird ein Haus gebaut und die Adresse wird direkt auf eine neue Adresskarte geschrieben.

Und wenn Du nun einen Kartenstapel von Adresskärtchen hast und du Da irgendwas machen willst, dann musst Du sicher stellen, dass da gültige Adressen sind. Und das kannst Du machen, in dem Du für jedes Kärtchen als erstes das entsprechende Haus baust.

Das ist so hoffentlich visuell vorstellbar.
Ja, ein gutes Beispiel. Danke.

LG Heiko
 

Data2006

Mitglied
vek ist ein Array mit ReferenvariabLen ne? Und jede Variable „zeigt“ auf ein eigenes Objekt der Klasse Vektor

Wie würde sowas im Speicher aussehen? Klar ein Array vek sind Speicherstellen hintereinander, also vek[0], vek[1], vek[2] usw.


Man braucht doch 2 Speicherstellen, einer für die Referenzvariable und eine für das Objekt.

LG
Heiko
 

LimDul

Top Contributor
Zwar kannst du dir darüber Gedanken machen, aber das ist in der Regel nicht hilfreich um Java zu lernen. Java ist ein High-Level Sprache, die von der Maschinensprache entkoppelt ist. Das heißt, wie es im Speicher organisiert ist, ist vollkommen egal und muss aufgrund der Tatsache, dass Java in eine Zwischensprache kompiliert für die Entwicklung auch vollkommen irrelevant sein.
 

LimDul

Top Contributor
Was die Spec für Virtuelle Maschine dazu sagt:
The Java Virtual Machine contains explicit support for objects. An object is either a dynamically allocated class instance or an array. A reference to an object is considered to have Java Virtual Machine type reference. Values of type reference can be thought of as pointers to objects. More than one reference to an object may exist.

und

2.7. Representation of Objects​

The Java Virtual Machine does not mandate any particular internal structure for objects.

In some of Oracle’s implementations of the Java Virtual Machine, a reference to a class instance is a pointer to a handle that is itself a pair of pointers: one to a table containing the methods of the object and a pointer to the Class object that represents the type of the object, and the other to the memory allocated from the heap for the object data.

Soll heißen, wie es im Speicher abgelegt wird, ist vollkommen egal, das kann sich von Java Version zu Java Version unterscheiden.
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Klassen Deklaration und Initialisierung Java Basics - Anfänger-Themen 15
T Unterschied Initialisierung von Klassen Java Basics - Anfänger-Themen 3
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
S If Abfrage nur mit bestimmter Initialisierung? Java Basics - Anfänger-Themen 8
B Klassen Ungültige Objektzustände bei der Initialisierung Java Basics - Anfänger-Themen 2
A OOP und Initialisierung Java Basics - Anfänger-Themen 5
N Methode mit While-Schleife und If-Bedingung und Array-Initialisierung Java Basics - Anfänger-Themen 4
T Erste Schritte Frage zur Initialisierung eines Mehrdimensionalen Arrays Java Basics - Anfänger-Themen 3
R Erste Schritte Deklaration und Initialisierung von Arrays Java Basics - Anfänger-Themen 21
A Variablen Variable soll ihren Wert nach Initialisierung nicht mehr ändern Java Basics - Anfänger-Themen 2
M Interpreter-Fehler Nullpointerexception trotz Ordentlicher Initialisierung Java Basics - Anfänger-Themen 4
M Deklaration und Initialisierung bei Method Erstellung Java Basics - Anfänger-Themen 12
E Initialisierung von Attributen und Konstruktor Java Basics - Anfänger-Themen 0
F Erste Schritte Frage zur Initialisierung Java Basics - Anfänger-Themen 4
S Initialisierung von Klassenvariablen Java Basics - Anfänger-Themen 7
D Problem mit Initialisierung und Reihenfolge Java Basics - Anfänger-Themen 10
J Initialisierung Array-Liste Java Basics - Anfänger-Themen 3
S Object Initialisierung Java Basics - Anfänger-Themen 7
F Variable ohne Initialisierung in For Schleife Java Basics - Anfänger-Themen 5
B Initialisierung von Zeichenpanel Java Basics - Anfänger-Themen 3
D Datentypen Felder: Deklaration und Initialisierung Java Basics - Anfänger-Themen 5
Luk10 Saubere Initialisierung im Konstruktor Java Basics - Anfänger-Themen 4
M Variablen Initialisierung von Arrays Java Basics - Anfänger-Themen 7
K Datentypen Default Initialisierung Java Basics - Anfänger-Themen 8
P Initialisierung einer 5*5 Matrix mit best. Werten Java Basics - Anfänger-Themen 2
V Datentypen Array Initialisierung funktioniert nicht Java Basics - Anfänger-Themen 3
B Fragen zur Initialisierung/Zuweisung der Variable + Packages erstellen Java Basics - Anfänger-Themen 4
S jTree initialisierung Java Basics - Anfänger-Themen 4
G Initialisierung + alte Werte Java Basics - Anfänger-Themen 7
F "Initialisierung der VM fehlgeschlagen. res=-4 jvm is n Java Basics - Anfänger-Themen 5
P Grundsätzliches zur String-Initialisierung Java Basics - Anfänger-Themen 2
M String Initialisierung Java Basics - Anfänger-Themen 5
tobiasbeil Fehler array initialisierung. Nur erklärung bitte. Java Basics - Anfänger-Themen 2
H String initialisierung Java Basics - Anfänger-Themen 9
A array nach initialisierung final machen? Java Basics - Anfänger-Themen 17
M Initialisierung Java Basics - Anfänger-Themen 4
R Import von Klassen aus anderen Projekten mit dem Setzen des "Classpath" Java Basics - Anfänger-Themen 9
R Klassen Anonyme Klassen: Zugänglichkeit neuer Methoden Java Basics - Anfänger-Themen 2
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben