在单个实例中更改静态变量的值(Java)

时间:2017-07-16 11:33:20

标签: java class static instance

我刚刚开始学习Java。假如您创建以下类:

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

现在你为女儿创建一个实例,并将她的名字设置为,比如Ann,等等。如果她结婚或者决定更改她的姓氏,你将如何改变她的实例的价值? lastName而不是整个班级?

起初我尝试创建两个实例:

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

但这改变了整个班级。我尝试在FamilyMember类中创建一个方法,该方法将设置一个新的lastName:

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

甚至尝试添加静态'无效之前。但所有这些只是不断改变整个班级的价值。我在论坛上发现了类似的问题,但没有一个问题涉及这一特定问题。

2 个答案:

答案 0 :(得分:0)

  

但这改变了整个班级。

确切地说,你的姓氏是一个班级成员而不是实例成员。类成员不与实例绑定。因此,您会看到您不想要的奇怪行为。

只需删除静态。

private String lastName = "Doe";

答案 1 :(得分:0)

您可以删除lastname的static修饰符,如果要为以后可以修改的每个实例创建一个默认值,可以使用多个构造函数,或者使用setter作为lastname。

e.g:

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

}