2011-05-18 64 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就是你所得到的。

使它们成为实例变量应该可以解决您的问题。