2017-07-16 11 views
1

私はちょうどJavaの学習を始めました。単一インスタンス内の静的変数の値を変更する(Java)

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

彼女が結婚したり、彼女の最後の名前を変更することを決定した取得した場合、どのようになり今は娘のためにインスタンスを作成し、そしてなど、アン、たとえば、に彼女の名前を設定します。あなたは以下のクラスを作成する場合と言いますlastNameという名前のインスタンスの値だけを変更し、クラス全体は変更しません。

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

しかし、それは全体のクラスを変更:

は、最初に私は2つのインスタンスを作成してみました。私は新しいlastNameのを設定しますFamilyMemberクラスのメソッドを作成してみました:

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

はさえ、ボイドの前に「静的」を追加しようとしました。しかし、すべての人が単にクラス全体の価値を変え続けました。フォーラムでも同様の質問がありましたが、この特定の問題に対処するものはありませんでした。

+0

そのフィールド 'static'は全く意味をなさない作り、' lastname' –

+0

はいため 'static'修飾子を削除します。そして、このフォーラムでも同様の質問がありましたが、この特定の問題に対処している質問はありませんでした。この問題は、このサイト全体で、またほとんどのJavaチュートリアルの紹介でうまくいきます。 –

+0

@HovercraftFullOfEels悪い実際の例がなくてもGoogleでいくつかの言葉で話すのは難しかったし、他のスレッドでも同様の質問と回答を正しく理解していないといけない –

答えて

0

しかし、クラス全体が変更されました。

あなたの姓はインスタンスメンバーではなく、クラスメンバーになりました。クラスメンバはインスタンスとバインドしません。あなたが望んでいない奇妙な行動を見ているからです。

静的を削除するだけです。

private String lastName = "Doe"; 
0

あなたは姓のためにstatic修飾子を削除することができ、あなたは後で変更することができ、すべてのインスタンスのデフォルト値を作成したい場合、あなたはそれのために複数のコンストラクタを使用するか、または姓のためのセッターを使用することができます。

例えば:

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; 
    } 

} 
関連する問題