2011-05-18 66 views
0

我遇到類問題。我做了我自己的班,名爲「人」。其中需要參數「名稱」和「年齡」。在我的其他課上,我想製作一個人物[]。哪個起作用,主要問題是數組只保存我輸入的最後一個條目。我該如何解決這個問題?Java類問題

請注意:這不是家庭作業。我正在爲自己的項目工作。

代碼:

 public class Person { 

     private static String name; 
     private static int age; 

     public Person(){ 
      Person.name = "NAME"; 
      Person.age = 0; 
     }  

     public Diver(String name,int age){ 
      Person.name = name; 
      Person.age = age; 

     } 

     public static String getName(){ 
      return Person.name; 
     } 

     public static int getScore(){ 
      return Person.age; 
     } 

     public static String printString(){ 

      return Person.name + " " + Person.age; 
     } 


    } 

    public class TESTER { 
    public static void main(String[]args){ 
     Person[] persons = new Person[4]; 
     persons[0] = new Person("bob2",15); 
     persons[1] = new Person("bob1",15); 
     persons[2] = new Person("bob",16); 

     for(int i = 0;i<persons.length;i++){ 
      System.out.println(persons[i].printString()); 
     } 

    } 

} 

回答

10

不要把名字和年齡靜態的。另外,讓所有的方法都是非靜態的。

靜態變量是特定於類的。實例變量是特定於該類的每個對象的。

然後,當一個類中,而不是指一個變量Person.name,只是稱其爲name

+1

阿門!而這是一個問題的原因是,通過使變量爲靜態,你可以將它們變爲類的變量,而不是對象,所有對象將共享相同的名稱和年齡變量 - 因此,如果將其更改爲一個變量,你改變它的一切。 – 2011-05-18 18:33:16

+1

有些情況下應該使用靜態變量。這種情況下的一個例子是,如果他想跟蹤有多少人。但大多數事情通常不應該是靜態的(根據我的經驗) – matzahboy 2011-05-18 18:37:57

4

靜態變量類範圍,這意味着人的每個實例共享相同的靜態變量。

0
public class Person { 

private String name; 
private int age; 

public Person(){ 
    name = "NAME"; 
    age = 0; 
}  

public Person(String name,int age){ 
    this.name = name; 
    this.age = age; 

} 

public String getName(){ 
    return name; 
} 

public int getScore(){ 
    return age; 
} 

public String printString(){ 

    return name + " " + age; 
} 

} 

當您使用它們的對象

+0

-1不解釋__why__'static'不起作用 – Pops 2011-05-18 18:34:23

0

時,你有沒有使用靜態VAR和方法:

class aClass { 
    private static String name; 
} 

每個實例(事情得到與制)該創建的類共享相同的「名稱」變量。 當你做到這一點...

class aClass { 
    private String name ; 
} 

每個實例都將擁有自己獨立的名字。

0

請勿使名稱和年齡保持不變。

當一個字段是靜態的,這意味着,它不屬於這個類的實例,而是屬於類本身。這意味着在所有應用程序中只有一個變量名稱,並且所有人員實例將分享它。 所以當你改變名字和年齡時,你改變了所有的班級,他們都會有你最後使用的班級。

0

哪個工作,主要問題是數組只保存我輸入的最後一個條目。我該如何解決這個問題?

背後的問題是你使用的是靜態變量,而應該是實例變量。由於它們是靜態的,因此它們有一個副本,每次都會被覆蓋,最後,最後一對nameage就是你所得到的。

使它們成爲實例變量應該可以解決您的問題。