Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java类问题_Java - Fatal编程技术网

Java类问题

Java类问题,java,Java,我上课有问题。我自己制作了一个名为“人”的课程。它接受参数“name”和“age”。在我的另一门课上,我想成为一个人。这是可行的,主要问题是数组只保存我输入的最后一个条目。我怎样才能解决这个问题 请注意:这不是家庭作业。我正在做我自己的项目 代码: public class Person { private static String name; private static int age; public Person(){

我上课有问题。我自己制作了一个名为“人”的课程。它接受参数“name”和“age”。在我的另一门课上,我想成为一个人。这是可行的,主要问题是数组只保存我输入的最后一个条目。我怎样才能解决这个问题

请注意:这不是家庭作业。我正在做我自己的项目

代码:

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

    }

}
公共类人物{
私有静态字符串名;
私人静态信息;
公众人士(){
Person.name=“name”;
Person.age=0;
}    
公共潜水员(字符串名称,整数){
Person.name=姓名;
Person.age=年龄;
}
公共静态字符串getName(){
返回Person.name;
}
公共静态int getScore(){
返回人。年龄;
}
公共静态字符串printString(){
返回Person.name+“”+Person.age;
}
}
公共类测试员{
公共静态void main(字符串[]args){
人员[]人员=新人员[4];
人员[0]=新人员(“bob2”,15);
人员[1]=新人员(“bob1”,15);
人员[2]=新人员(“bob”,16岁);

对于(inti=0;i不要将name和age设置为静态的。另外,要将所有方法设置为非静态的

静态变量特定于类。实例变量特定于该类的每个对象


然后,当在类中时,不要将变量称为
Person.name
,而是将其称为
name

静态变量是类范围内的,这意味着Person的每个实例共享相同的静态变量

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

}
对对象使用静态变量和方法时,不要使用静态变量和方法

class aClass {
   private static String name;
}
创建的类的每个实例(使用new生成的东西)都共享相同的“name”变量。 当你这么做的时候

class aClass {
   private String name ; 
}
每个实例都有自己的单独名称


不要让名字和年龄一成不变

当一个字段是静态的时,它意味着该字段不属于该类的实例,而是属于该类本身。这意味着在所有应用程序中只有一个变量名,并且所有Person实例都将共享该变量名。
因此,当您更改名称和年龄时,您会更改所有类的名称和年龄,并且它们都将具有您使用的最后一个类。

这是可行的,主要问题是数组只保存我输入的最后一个条目。我如何解决此问题?

这背后的问题是,您使用的是静态变量,它们应该是实例变量。因为它们是静态的,所以每次都有一个副本被覆盖,最后一对
name
age
就是您得到的


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

Amen!这是一个问题的原因是,通过使变量成为静态变量,您可以使它们成为类的变量,而不是对象的变量,然后所有对象都将共享相同的名称和年龄变量——因此,如果您将其更改为一个变量,那么您就可以将其更改为所有变量。在某些情况下你应该使用静态变量。在这种情况下的一个例子是,如果他想记录有多少人。但大多数事情通常不应该是静态的(以我的经验)