2017-07-16 29 views
1

Ich habe gerade erst begonnen Java zu lernen. Sagen Sie, wenn Sie die folgende Klasse zu erstellen:Wert einer statischen Variablen in einer einzigen Instanz ändern (Java)

class FamilyMember { 
    static String lastName = "Doe"; 
    String name; 
    int age; 
} 

Jetzt haben Sie eine Instanz für eine Tochter zu erstellen, und setzen Sie ihren Namen, sagen wir, Ann, etc. Wenn sie heiratet oder entscheidet ihren Nachnamen zu ändern, wie würde Sie ändern nur den Wert von lastName für ihre Instanz und nicht die gesamte Klasse?

Zuerst versuchte ich zwei Instanzen zu erstellen:

FamilyMember john = new FamilyMember(); 
FamilyMember ann = new FamilyMember(); 
ann.lastName = "Stewart"; 

Aber das die gesamte Klasse geändert. Ich habe versucht, eine Methode in der Klasse Family zu schaffen, die einen neuen Nachnamen setzen würde:

void changeLastName(String newName) { 
    lastName = newName; 
} 

sogar versucht, ‚statische‘ vor Leerer Zugabe. Aber all diese änderten einfach den Wert für die gesamte Klasse. Ich habe ähnliche Fragen im Forum gefunden, aber keine von ihnen befasst sich mit diesem speziellen Thema.

+0

die 'static' Modifikator für' lastname' –

+0

entfernen Ja, das Feld zu machen 'static' überhaupt keinen Sinn macht. Und dies: 'Ich habe ähnliche Fragen im Forum gefunden, aber keine von ihnen befasst sich mit diesem speziellen Problem. 'Macht keinen Sinn, da dieses Problem auf dieser Website und in den meisten Einführungen in das Java-Tutorial gut angesprochen wird. –

+0

@HovercraftFullOfEels Mein schlechtes. Es fiel mir schwer, mein Problem in wenigen Worten auf Google zu formulieren, ohne ein konkretes Beispiel zu nennen, und ähnliche Fragen und Antworten in anderen Threads habe ich nicht richtig verstanden –

Antwort

0

Aber das änderte die gesamte Klasse.

genau hat Sie Ihr Nachname eine Klasse memeber und keine Instanz Mitglied. Klassenmitglieder binden nicht mit Instanz. Daher siehst du das seltsame Verhalten, das du nicht willst.

nur die statische entfernen.

private String lastName = "Doe"; 
0

Sie können den statischen Modifikator für Nachnamen entfernen, und wenn Sie einen Standardwert für jede Instanz machen wollen, die später geändert werden können, können Sie mehr Konstruktor für sie, oder verwenden Sie Setter für den Nachnamen verwenden.

z:

class FamilyMember { 
    String lastName; 
    String name; 
    int age; 

    public FamilyMember(final String name, final int age) { 
     this.lastName = "Doe"; 
     this.name = name; 
     this.age = age; 
    } 

    public FamilyMember(final String lastName, final String name, final int age) 
    { 
      this.lastName = lastName; 
      this.name = name; 
      this.age = age; 
    } 

} 
Verwandte Themen