Variablen überschreiben

julchen81

Bekanntes Mitglied
Hallo,

ich weiß, wie ich das Problem umgehen kann, aber ich würde gerne wissen, wieso folgendes nicht funktioniert:

Java:
public class Test {
    private int zahl;
    public Test(int zahl) {
        zahl = zahl;
    }
}

wenn ich ein Objekt der Klasse erzeuge und beim Erzeugen eine Zahl z.B. 5 angebe, dann bleibt der Wert von zahl trotzdem gleich 0.

Wieso genau? Was läuft schrittweise ab?

Viele Grüße und schon mal danke für jede Hilfe!
Julia
 
T

Tomate_Salat

Gast
weil du hier den Parameter zahl editierst. Woher sollte Java auch wissen, dass du die Variable zahl der Klasse Test meinst. Aber dafür gibt es eine einfache Lösung:
Java:
this.zahl=zahl;
 
G

Gast2

Gast
Java:
zahl = zahl;
Woher soll Java wissen, dass du mit dem linken
Code:
zahl
deine Klassenvariable meinst und mit der rechte
Code:
zahl
den Wert des Konstruktors?
Java nimmt immer die Variable die den kleinsten Scope hat, das ist in deinem Fall die Zahl die nur im Konstruktor gültig ist.
Du musst schreiben:
Java:
this.zahl = zahl;
Code:
this.zahl
bezieht sich auf die Klassenvariable
Code:
zahl
ist weiterhin der Wert der im Konstruktor übergeben wird.
 

darekkay

Bekanntes Mitglied
Du hast zwei Variablen mit dem selben namen. Im Test-Konstruktor wird deswegen die Variable genommen, die als Parameter übergeben wurde. Sprich, du weist dem Paramter den Parameter zu (Eclipse würde dir dies unterstreichen).

Die richtige Lösung "this.zahl = zahl" scheinst du ja schon zu kennen.
 
F

Firephoenix

Gast
Beschäftige dich dazu einmal mit den Begriffen Shadowing und Scoping.

Eine Variable gilt für den Klammernblock in dem sie deklariert wurde.
Hast du in diesem Klammernblock einen weiteren Klammernblock und deklarierst darin eine Variable die genauso heißt wie die im äußeren, dann überlagert die innere Variable die äußere.

Genau genommen machst du in deinem Programm damit nichts anderes als:

Java:
public class Test {
    private int zahl1;
    public Test(int zahl2) {
        zahl2 = zahl2;
    }
}

(ich habe nur die Namen geändert, der Effekt ist der gleiche).

Um aber trotzdem auf die Variable zahl1 (bzw zahl in deinem Beispiel) zugreifen zu können, kannst du das keyword "this" benutzen, dieses bezieht sich auf die aktuelle Klasseninstanz und mit this.zahl1 weiß der compiler, dass du das feld zahl1 der aktuellen klasseninstanz meinst die du gerade erzeugst.
nach dem gleichen schema kannst du auch setter bauen:
Java:
int zahl1;
public void int setZahl1(int zahl1){
    this.zahl1 = zahl1;
}
Gruß

Edit: Als ich angefangen habe zu schreiben war der Thread noch leer :p
 

julchen81

Bekanntes Mitglied
Danke!! Hammer, so schnell so viele Antworten!!

Dickes Danke an alle und danke Firephoenix für diese besonders ausführliche Antwort :)

Logisch... Groschen ist gefallen.

Julia
 
Guten Tag,
ich würde das kleine Programm gerne einmal Test, allerdings bekomme ich es nicht zum laufen.
Ist jemand so nett und kann den kompletten Quelltext mit Startpunkt hier einstellen ?

Danke und ein schönes Wochenende
Kai
 

Robat

Top Contributor
Der Thread ist 7 Jahre alt, ich glaube nicht, dass hier von den ursprünglichen noch jemand antwortet ;)
Mach am Besten nächstes mal einen eigenen Thread auf.

Das Programm wird wohl irgendwie so ausgesehen haben:
Java:
public class Test {
    private int zahl;
    public Test(int zahl) {
        this.zahl = zahl;
    }

    public static void main(String[] args) {
         Test test = new Test(2);
         System.out.println(test.zahl);
    }
}
 

MoxxiManagarm

Top Contributor
Der Thread ist 7 Jahre alt, ich glaube nicht, dass hier von den ursprünglichen noch jemand antwortet ;)
Mach am Besten nächstes mal einen eigenen Thread auf.

Das Programm wird wohl irgendwie so ausgesehen haben:
Java:
public class Test {
    private int zahl;

    public Test(int zahl) {
        this.zahl = zahl;
    }

    public static void main(String[] args) {
         Test test = new Test(2);
         System.out.println(test.zahl);
    }
}
Der Code wird nicht funktionieren.

Java:
public class Test {
    private int zahl;

    public Test(int zahl) {
        this.zahl = zahl;
    }

    public int getZahl() {
        return zahl;
    }

    public static void main(String[] args) {
         Test test = new Test(2);
         System.out.println(test.getZahl());
    }
}

Oder Zahl public machen aber wir sollten das Geheimnisprinzip wahren :cool:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
X OOP Getter/Setter überschreiben den Wert ihrer Variablen nicht Java Basics - Anfänger-Themen 4
J Variablen überschreiben innerhalb einer Klasse Java Basics - Anfänger-Themen 7
K Sortieren, überschreiben von Variablen? Java Basics - Anfänger-Themen 13
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
T Variablen Java Basics - Anfänger-Themen 1
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
M Aufsummieren von variablen Wertegrößen Java Basics - Anfänger-Themen 17
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
Arif Vererbung Methodenvererbung mit finalen Variablen Java Basics - Anfänger-Themen 1
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Variablen umbenennen Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
mars90 Fehler in der Variablen Deklaration Java Basics - Anfänger-Themen 8
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
A Übergreifende Variablen Java Basics - Anfänger-Themen 17
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
P Variablen Variablen voneinander abhängig Java Basics - Anfänger-Themen 54
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
temi Redundante Variablen Java Basics - Anfänger-Themen 29
Aprendiendo Zweifel mit versteckter Variablen Java Basics - Anfänger-Themen 16
L Variablen einmal nur zu weisen Java Basics - Anfänger-Themen 62
D Statische Variablen/Methoden Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
S Vererbung Variablen klassenübergreifend nutzen Java Basics - Anfänger-Themen 42
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
L Variablen dekleration + reset Java Basics - Anfänger-Themen 16
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
S Variablen Flexible Variablen Namen Java Basics - Anfänger-Themen 3
R Erste Schritte 3 Variablen hochzählen lassen Java Basics - Anfänger-Themen 1
RowdyN Variablen Variablen beliebig benennen? Java Basics - Anfänger-Themen 6
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
H Variablen einer Schleife zwischenspeichern Java Basics - Anfänger-Themen 2
P Klassen Variablen von einer Klasse zur anderen Java Basics - Anfänger-Themen 5
H Objekt überschreibt Variablen vorheriger Objekte Java Basics - Anfänger-Themen 2
P Variablen in Excel speichern Java Basics - Anfänger-Themen 6
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
F Variablen unterschiedlicher Datentypen Java Basics - Anfänger-Themen 6
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
P Textfelder in Variablen speichern Java Basics - Anfänger-Themen 13
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
J Vererbung Variablen aus Superklasse übernehmen Java Basics - Anfänger-Themen 2
L Variablen aus TXT Datei auslesen und vergleichen. Java Basics - Anfänger-Themen 5
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
L zwei Variablen gleichzeitig übergeben Java Basics - Anfänger-Themen 6
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
D Klassen Verhalten von Klassenvererbung bei Variablen Java Basics - Anfänger-Themen 1
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7
S OOP Werte von Vektoren mit 3 Variablen ausgeben lassen Java Basics - Anfänger-Themen 3
A Variablen aus einer Schleife gezielt auslesen Java Basics - Anfänger-Themen 11
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
K Enigma, variablen übernehmen Java Basics - Anfänger-Themen 6
F Erste Schritte Dynamische Variablen Java Basics - Anfänger-Themen 15
N Variablen zurück casten Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben