打印出数组列表中的所有对象

可能重复:
如何以正确的方式打印对象内容?

我需要能够在我的数组列表中打印出Student对象(所有变量)。 这可能吗? 当我尝试打印时输出这类东西,例如student.Student@82701e 。 我认为这是hexadecimal或其他东西

这是我的代码:

 package student; public class Student { private String studentName; private String studentNo; private String email; private int year; public Student() { this.studentName = null; this.studentNo = null; this.email = null; this.year = -1; } public Student(String nName, String nNum, String nEmail, int nYr) { this.studentName = nName; this.studentNo = nNum; this.email = nEmail; this.year = nYr; } public void setStudentName(String newStudentName) { this.studentName = newStudentName; } public void setStudentNo(String newStudentNo) { this.studentNo = newStudentNo; } public void setEmail(String newEmail) { this.email = newEmail; } public void setYear(int newYear) { this.year = newYear; } public String getStudentName() { return studentName; } public String getStudentNo() { return studentNo; } public String getEmail() { return email; } public int getYear() { return year; } } package student; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class studentTest { public static void main(String[] args) { Scanner input = new Scanner(System.in); List Students = new ArrayList(); Student student1 = new Student(); student1.setStudentName("Bob Marley"); student1.setStudentNo("N0002"); student1.setEmail("student2@student.com"); student1.setYear(2); Students.add(student1); Student student2 = new Student(); student2.setStudentName("Bill Harvey"); student2.setStudentNo("N0003"); student2.setEmail("student3@student.com"); student2.setYear(2); Students.add(student2); Student student3 = new Student(); student3.setStudentName("John Beans"); student3.setStudentNo("N0004"); student3.setEmail("student4@student.com"); student3.setYear(2); Students.add(student3); System.out.println("Add new students: "); System.out.println("Enter number of students to add: "); int countStudents = input.nextInt(); for (int i = 0; i < countStudents; i++) { Student newStudents = new Student(); System.out.println("Enter details for student: " + (i + 1)); System.out.println("Enter name: "); newStudents.setStudentName(input.next()); System.out.println("Enter Number: "); newStudents.setStudentNo(input.next());System.out.println("Search by student number: "); System.out.println("Enter email: "); newStudents.setEmail(input.next()); System.out.println("Enter year: "); newStudents.setYear(input.nextInt()); Students.add(newStudents); } } } 

覆盖Student类中的toString()方法,如下所示:

  @Override public String toString() { return ("StudentName:"+this.getStudentName()+ " Student No: "+ this.getStudentNo() + " Email: "+ this.getEmail() + " Year : " + this.getYear()); } 

每当打印任何类的实例时,都会调用Object类的default toString实现,它返回您获得的表示forms。 它包含两部分 : – TypeHashcode

所以,在student.Student@82701e ,你得到输出 – >

  • student.StudentType ,和
  • 82701eHashCode

因此,您需要覆盖Student类中的toString方法以获取所需的String representation : –

 @Override public String toString() { return "Student No: " + this.getStudentNo() + ", Student Name: " + this.getStudentName(); } 

因此,当您从main类中打印ArrayList ,它将为每个实例调用toString方法,而不是Object类中的那个: –

 List students = new ArrayList(); // You can directly print your ArrayList System.out.println(students); // Or, iterate through it to print each instance for(Student student: students) { System.out.println(student); // Will invoke overrided `toString()` method } 

在上述两种情况下,将调用Student类中重写的toString方法,并打印每个实例的适当表示。

您必须在Student类中定义public String toString()方法。 例如:

 public String toString() { return "Student: " + studentName + ", " + studentNo; }