Как вывести на консоль значения(обьектов массива?) разного типа переменных из экземпляров класса
public class Ops {
public String name;
public int age; //создаю класс и его параметры
public Ops(String name, int age ){
this.name = name;
this.age = age; //причисляю ему переменные
}
public String getName() {
return name; //Получие имени
}
public void setName(String name) {
this.name = name; //возврат в строку класса
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age; //те же яйца только в профиль
}
}
import java.util.Scanner;
public class programm {
public static void main(String[] args){
Ops[] array = new Ops[4];
for(int i = 1; i<4; i++) {
Scanner nameString = new Scanner(System.in);
String name = (nameString.nextLine());
Scanner ageInt = new Scanner(System.in);
int age = ageInt.nextInt();
array[i] = new Ops(name, age);
//System.out.print("Os:"+name);
//System.out.print(" age:"+age + System.lineSeparator());
}
System.out.print("Список всех Ос." + System.lineSeparator() );
for(int i = 1; i<4; i++) {
System.out.println(array[i]);
}
}
}
не представляю как вывести на панель вывода все значения обьектов массива. при коде выводятся адреса классов, а не их значения, что мне нужно. "Список всех Ос. Ops@46f7f36a Ops@421faab1 Ops@2b71fc7e"
Если не трудно - максимально подробно обьясните как правильно сделать, и что можно улучшить)
Ответы (1 шт):
При попытке вызвать
System.out.println(array[i]);
происходит вызов метода, println (класс PrintStream):
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
В первой строке объект пребразуется в строковое представление:
String s = String.valueOf(x);
Если вы откроете реализацию этого метода в классе String, то увидите примерно следующее:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
у объекта вызывается метод toString()
У вашего объекта класса Ops нет такого метода. Но так как все классы наследуются от класса Object, то происходит вызов метода из этого класса. Открываем реализацию этого метода в классе Object:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
В вашем случае выполняется именно эта реализация метода, поэтому вы и получаете ответ вида "Ops@46f7f36a" и т.п.
Если вы хотите получить другой результат, то вам нужно переопределить метод toString() для класса Ops. Добавьте реализацию метода, например:
@Override
public String toString() {
return "Ops{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}