#java
#java
Вопрос:
У меня проблема с классами. Я создал свой собственный класс под названием «Person». Который принимает параметры «имя» и «возраст». В моем другом классе я хочу создать Person[] . Что работает, основная проблема заключается в том, что массив сохраняет только последнюю вводимую мной запись. Как я могу это исправить?
Пожалуйста, обратите внимание: это не домашнее задание. Я работаю над своим собственным проектом.
код:
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());
}
}
}
Ответ №1:
Не делайте имя и возраст статичными. Кроме того, сделайте все ваши методы нестатическими.
Статические переменные специфичны для данного класса. Переменные экземпляра специфичны для каждого объекта этого класса.
Затем, находясь внутри класса, вместо ссылки на переменную как Person.name
, просто ссылайтесь на нее как name
Комментарии:
1. Аминь! И причина, по которой это проблема, заключается в том, что, делая переменные статическими, вы делаете их переменными класса, а не объекта, и тогда все объекты будут использовать одно и то же имя и переменную возраста — так что, если вы измените его для одного, вы измените его для всех.
2. Есть некоторые ситуации, когда вам следует использовать статические переменные. Примером в данном случае может служить то, хотел ли он отслеживать, сколько там было людей. Но большинство вещей, как правило, не должны быть статичными (по моему опыту)
Ответ №2:
статические переменные являются общеклассовыми, это означает, что каждый экземпляр Person использует одни и те же статические переменные.
Ответ №3:
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;
}
}
не используйте статические переменные и методы, когда вы используете их для объектов
Ответ №4:
когда у вас есть:
class aClass {
private static String name;
}
КАЖДЫЙ экземпляр (вещи, которые создаются с помощью new) этого созданного класса использует одну и ТУ ЖЕ переменную ‘name’.
Когда вы делаете это…
class aClass {
private String name ;
}
У каждого экземпляра будет свое отдельное имя.
Ответ №5:
Не делайте имя и возраст статичными.
Когда поле является статическим, это означает, что оно принадлежит не экземплярам этого класса, а самому классу. Это означает, что во всем вашем приложении есть только одно имя переменной, и все экземпляры Person будут использовать его совместно. итак, когда вы меняете имя и возраст, вы меняете для всех классов, и у всех них будут последние, которые вы использовали.
Ответ №6:
Что работает, основная проблема заключается в том, что массив сохраняет только последнюю вводимую мной запись. Как я могу это исправить?
Проблема, стоящая за этим, заключается в том, что вы используете статические переменные, вместо этого они должны быть переменными экземпляра. Поскольку они статичны, существует их единственная копия, которая каждый раз перезаписывается, и в итоге вы получаете последнюю пару name
и age
.
Превращение их в переменные экземпляра должно решить вашу проблему.