Klassenvariable oder Instanzvariable

Orkanson

Mitglied
Hallo,

ich habe hier ein kleines Problem. Ich verstehe nicht warum die variable "m" für alle existierenden Instanzen hochgezählt wird.
Speziell geht es um den Punkt den ich kommentiert habe.

Java:
public class M {

int m = 3;

public M succ() {
m++;
return this;
}
public int triplyAdd(int z) {
return 3 * m + z;
}

public void fill(int[] a) {
for (int i = 0; i < a.length; i++)
a[i] = m - i;
}

public void fill(int z) {
z = m;
}

public static void main(String[] args){
int y, z = 2;
M b;
M a = new M(); /*i*/
System.out.println(a.m);
b = a.succ(); /*ii*/
System.out.println(b.m);
System.out.println(a.m); // Warum ist a.m hier auch 4?
y = a.triplyAdd(z); /*iii*/
y = a.m; /*iv*/

y = a.succ().succ().triplyAdd(3); /*v*/
a.fill(a.m); /*vi*/

a.m = 10;
int[] f = {y,y,y};

b.fill(f); /*vii*/

System.out.println(f[1]); /*viii*/
System.out.println(f[2]); /*ix*/

}
}

Danke für die Hilfe
 

Robat

Top Contributor
Weil b eine Kopie von a ist.
Wenn du a.succ() aufrufst wird m erhöht und eine diese Instanz zurückgegeben, welche dann in b gespeichert wird.
 

Orkanson

Mitglied
Verstehe ich leider noch nicht genau @Robat. Kannst du das nochmal genauer ausführen.

Nach meiner Meinung läuft es wie folgt:

1. b = null
2. a wird mit 3 initialisiert.
3. nach a.succ(); ist b.m = 4 und a.m = 3;

M b;
M a = new M(); /*i*/
System.out.println(a.m);
b = a.succ(); /*ii*/
System.out.println(b.m);
System.out.println(a.m); // Warum ist a.m hier auch 4?

warum ändert m++ alle bestehenden Instanzen ab? "M" ist doch eine Instanzvariable und keine Klassenvariable, oder was haue ich hier durcheinander?
 

Robat

Top Contributor
Java:
// b ist nicht initialisiert
M b;

// a wird initialisiert. a.m wird mit 3 initialisiert, da durch den new-Operator
// ein neues Objekt der Klasse M erstellt wird
M a = new M();

// ...
// hier wird die Methode succ() vom Objekt a aufgerufen. Die Methode erhöht den Wert von a.m um 1
// (damit ist a.m = 4) und gibt dann das aktuelle Objekt mit all seinen Eigenschaften zurück.
// Der Rückgabewert wird in b reingespeichert.
// b wird also zu a mit all seinen Attributen und Eigenschaften. Demnach wird auch
// der Wert von a.m mit genommen.
b = a.succ();
 

Orkanson

Mitglied
Okay wir nähern uns glaube ich.

Zeigt das Objekt b also im HEAP auf den Eintrag von A!?
Dadruch das bei b nie "new" gesagt wurde. Wird kein Speicher von für B reserviert. Jediglich der Pointer von b zeigt auf a!

Java:
M b;
M a = new M(); /*i*/
M c = new M();
System.out.println("am "+ a.m);
b = a.succ(); /*ii*/
System.out.println("bm "+ b.m);
System.out.println("am "+ a.m);
System.out.println("cm "+ c.m);
a.succ();
System.out.println("am "+ a.m);
System.out.println("bm "+b.m);

Glaube so ist nun richtig und ich hab das übel erkannt!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P unterschied Instanzvariable und Klassenvariable Java Basics - Anfänger-Themen 3
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
U Methode übernimmt nicht veränderte klassenvariable Java Basics - Anfänger-Themen 5
G Unterschied Instanz- Klassenvariable Java Basics - Anfänger-Themen 11
J Problem bei Zugriff auf Klassenvariable Java Basics - Anfänger-Themen 3
W Mit MEthode auf Klassenvariable zugreifen Java Basics - Anfänger-Themen 22
M Variablennamen als Parameter gleich Var. als Klassenvariable Java Basics - Anfänger-Themen 2
B Klassenvariable zuweisen in Konstrktor Java Basics - Anfänger-Themen 2
R Klassenvariable initialisieren Java Basics - Anfänger-Themen 9
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
C Methoden können nicht auf Instanzvariable der Klasse zugreifen Java Basics - Anfänger-Themen 3
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
E Eine Instanzvariable und zwei Objekte Java Basics - Anfänger-Themen 14
G Instanzvariable in main-Methode verboten? Java Basics - Anfänger-Themen 3
R Wie kann ich einen Objekt zu Instanzvariable speichern ? Java Basics - Anfänger-Themen 10
L Objekt mit einem Objekt als Instanzvariable Java Basics - Anfänger-Themen 2
L Warum ist Instanzvariable sichtbar? Java Basics - Anfänger-Themen 2
K Interface als Instanzvariable = gutes Design Java Basics - Anfänger-Themen 6
Jats Instanzvariable in Methode ändern Java Basics - Anfänger-Themen 6
L Lokale Variable und Instanzvariable innerhalb Iterator Java Basics - Anfänger-Themen 8
L Typ für Instanzvariable später festlegen Java Basics - Anfänger-Themen 17
B Variablen: unterschied zwischen Klassen und Instanzvariable Java Basics - Anfänger-Themen 2
S Rückgabewert einer Instanzvariable Java Basics - Anfänger-Themen 2
H Unterklasse von TimerTask mit Instanzvariable der Periode Java Basics - Anfänger-Themen 2
J Instanzvariable auch in erbenden klassen Java Basics - Anfänger-Themen 4
P Unterschied lokale Variable und Instanzvariable Java Basics - Anfänger-Themen 2
C instanzvariable in main wird nicht gefunden Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben