如何在Java中显示对象的内容

时间:2014-09-17 00:49:44

标签: java arraylist tostring

好的,现在我觉得我已经放弃了找到应该成为一个简单问题的解决方案的所有希望。基本上,我创造了一个学生'存储学生的记录系统' ArrayList中的详细信息。我首先在Student类中创建了一个构造函数,以指定每个学生将拥有的条目。然后,我在主类中创建了一个Student类的实例(即使用main方法的类),然后将student对象添加到studentList ArrayList。

顺便说一句,我最初的目标是让用户输入详细信息,然后使用Scanner或BufferedReader对象获取存储在Student对象中的详细信息,而不是硬编码学生的详细信息。然后到ArrayList但我也遇到了麻烦;所以我可能会在完成这个问题后立即解决这个问题。

无论如何,我希望输出打印出来的学生'细节,但我得到一个记忆位置(即[studentrecordsys.Student@15c7850])。我知道我需要覆盖toString方法但是这样做的确切方式是我无法得到的。一进入toString方法的@Override代码块,就会在任何地方出现语法错误。以下是我尝试过的内容:

import java.util.*;

class Student {
    private String studentID;
    private String studentName;
    private String studentAddress;
    private String studentMajor;
    private int studentAge;
    private double studentGPA;

     Student (String studentID, String studentName, String studentAddress, String 
             studentMajor, int studentAge, double studentGPA){

        this.studentID=studentID;
        this.studentName=studentName;
        this.studentAddress=studentAddress;
        this.studentMajor=studentMajor;
        this.studentAge=studentAge;
        this.studentGPA=studentGPA;
     }
}


public static void main(String[] args) {
Student ali = new Student("A0123", "Ali", "13 Bond Street", "BSc Software Engineering", 22, 3.79);
    List<Student> studentList = new ArrayList<>();

    studentList.add(ali);

    @Override
    String toString() {                        
        StringBuilder builder = new StringBuilder();
        builder.append(ali).append(studentList);
        return builder.toString();
    }

    System.out.println(builder);
}

3 个答案:

答案 0 :(得分:2)

您要覆盖toString方法,因为它会以您可以理解的可读格式为您提供有关对象的明确信息。

覆盖toString

的优点
  

帮助程序员记录调试Java程序

     

由于 toString 是在 java.lang.Object 中定义的,并且没有提供有价值的信息,所以它是      为子类重写它的好习惯。

Source and Read more about overriding toString

public String toString() { 
    return "Studnet ID: " + this.studentID + ", Student Name:"
           + this.studentName+ ", Studnet Address: " + this.studentAddress
           + "Major" + this.studentMajor + "Age" + this.studentAge
           + GPA" + this.studentGPA ;
} 

答案 1 :(得分:2)

您需要在Student对象上实现toString()。

public class Student {
    ...
    Your existing code
    ...

    @Override
    public String toString() {
        return studentID + ", " + studentName + ", " + //The remaining fields
    }
}

然后在你的main方法中,调用

for (Student student : studentList) {
    System.out.println(student.toString());
}

答案 2 :(得分:1)

您会收到错误,因为您必须覆盖要使用它的类中的toString方法。即你必须将方法与@Override放在Student类中。

你可以这样称呼它:

System.out.println(studentA.toString());
System.out.println(studentB.toString());

或循环:

for(Student x : studentList)
    System.out.println(x.toString());

依旧......

此外,在您的代码中,您可以在main方法中创建一个方法。当然你会收到错误。