在下面的代码中,我添加了两行打印输出。第一行像往常一样打印垃圾,但令人惊讶的是第二行给了我一个编译错误。为什么?
class Student {
private String name;
public Student(String name){
this.name = name;
}
public String getName(){
return name;
}
}
class StudentServer {
public StudentServer(){
Student[] s = new Student[30];
s[0] = new Student("Nick");
// LINE 01: This compiles, although prints junk
System.out.println(s[0]);
// LINE 02: I get a error called cannot find symbol
System.out.println(s[0].getName());
}
public static void main(){
new StudentServer();
}
}
main
方法的问题不是一个适当的应用程序入口点,这个代码应该编译并运行得很好。问题似乎在于其他地方,目前还没有足够的信息来确定来源。
toString()
打印s[0]
“像往常一样打印垃圾”的原因是因为你没有@Override
继承自toString()
的Object
方法。
如果你刚刚添加了这个方法:
@Override public String toString() {
return "Student : " + name;
}
然后打印s[0]
不会打印“垃圾”;它会打印上面的toString()
返回的任何东西(在这种情况下,这是合理的“不是垃圾”)。
试试这个:
public static void main(String[] args)