2017-07-16 87 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"; 

但是,這改變了整個班級。我嘗試在FamilyMember類中創建一個設置新姓氏的方法:

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

甚至嘗試在void之前添加'static'。但所有這些只是不斷改變整個班級的價值。我在論壇上發現了類似的問題,但他們都沒有解決這個問題。

+0

刪除'static'改性劑爲'lastname' –

+0

是,使那場'static'是沒有任何意義。而這個:「我在論壇上發現了類似的問題,但他們都沒有解決這個問題。」這個問題在整個網站以及大多數Java教程的介紹中都得到了很好的解決。 –

+0

@HovercraftFullOfEels我的不好。我很難在Google上用幾句話解釋我的問題,但沒有一個實際的例子,我一定沒有正確理解其他主題中的類似問題和答案 –

回答

0

但這改變了整個班級。

準確地說,您已將您的姓氏命名爲類memeber,而不是實例成員。班級成員不與實例綁定。因此你看到了你不想要的奇怪行爲。

只是刪除靜態。

private String lastName = "Doe"; 
0

您可以刪除static修飾符的名字,如果你想爲以後可以修改每個實例的默認值,您可以使用多個構造函數,或使用二傳手的姓氏。

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

}