Komisches Verhalten der Variablen

MoonScripter

Mitglied
Hey,

ich habe erst begonnen Java zu lernen und stehe schon vor einem Rätsel.

Ich möchte 2 Variablen in der Klasse ändern und diese ausgeben. Dazu habe ich diese deklariert und 2 Funktionen erstellt. Die erste führt die Änderung der Variablen aus und die zweite die Ausgabe. Soweit alles gut.

Ich habe meinen Code auch ausgeführt und bekomme aber nie den Namen so raus wie ich ihn geändert habe. Das komische ist aber, dass wenn ich mit der Funktion printName den Vornamen ausgebe, Hans ausgegeben wird. Dann wurde ja sozusagen schon eine Änderung vorgenommen aber warum wird dann noch der alte Name ausgegeben?

Woran kann es denn liegen?

Das ist mein Code:
Java:
package kunde;


class Kunde {
    
    String vorname = "Hasi";
    String nachname = "xx";
    String name = vorname + " " + nachname;
    
    public static void main(String[] args) {
        Kunde Kunde = new Kunde();
        Kunde.changeName("Hans", "Liser");
        Kunde.printName();
    }
    
    void changeName(String neuerVorname, String neuerNachname){
        vorname = neuerVorname;
        nachname = neuerNachname;
    }
    
    void printName() {
        System.out.println(name);
    }
    
    
}

MoonScripter
 
Du deklarierst name am Anfang 1 mal und weist der Variable einen Wert zu. Wenn sich vorname bzw nachname ändern, bekommt das name aber nicht mit. D.h. jedes mal wenn sich eine der beiden Variablen ändert, musst du name auch ändern.
 
Hi,

danke für die schnelle Antwort.

Okay. Habe es gleich mal getestet und es funktioniert. Aber warum nur so? Die Variable name hat ja keine statischen Werte. Verstehe ich noch nicht richtig. Es müssten doch der Vor- und Nachname dort eigesetzt werden.

Nach meinen Gedanken müsste eigentlich der Code so funktionieren:
  1. Instanzierung der Klasse Kunde
  2. Namesänderung (dabei werden den Variablen vorname & nachname neue Werte gegeben)
  3. Der neue Vor- und Nachname werden dann in der Variable name verkettet
  4. Variable name wird ausgegeben
Aber da liegt wohl ein Fehler?

MoonScripter
 
Du weist der Variablen name das Ergebnis von vorname + " " + nachname zu, d.h. wenn die Variable initialisiert wird, wird da nicht in die Variable geschrieben, dass Du da generell diese Aneinanderreihung haben willst, sondern es wird einmal ausgeführt und das Ergebnis wird dann gespeichert.

String ist ja nur eine Zeichenkette. Das andere wäre ja eine Funktion. Das könnte man aber auch bauen:
Java:
public String getName() {
    return vorname + " " + nachname;
}

Also den Code statt der Variablen name. Und dann nutzt Du natürlich statt name immer einen Funktionsaufruf: getName().
 
Hey,

asooooo. Jetzt habe ich es verstanden.

Ich muss dann die Variable bei dem Funktionsaufruf neu deklarieren da sonst noch die alten Werte drin stehen. Ist eigentlich logisch.

Auch wieder gelöst.

Vielen Dank 🙂

MoonScripter
 

Neue Themen


Zurück
Oben