我是Java编程的新手,我正在关注Udemy的指南。我正在通过类处理数据操作,这是一个简单的名称格式化程序。将预定义的字符串(名称的一部分)插入到类中以格式化它们。
该程序使用两个类:Name.java和NameTest.java(驱动程序文件)
Name.java :
package javaProject;
public class Name {
private String first;
private String middle;
private String last;
public Name(String f, String m, String l){
first = f;
middle = m;
last = l;
}
public Name(String f, String l){
first = f;
middle = "";
last = l;
}
public Name(String f){
first = f;
middle = "";
last = "";
}
public Name(){
first = "";
middle = "";
last = "";
}
///
public String displayName(){
return first + " " + middle + " " + last;
}
public static void main(String[] args){
}
}
NameTest.java :
package javaProject;
public class NameTest{
public static void main(String[] args){
Name myName = new Name("Damon", "myMiddleName", "myLastName");
System.out.println("My Name: " + myName.toString());
}
}
输出 :
My Name: javaProject.Name@35afe17b
知道为什么我在指定输出应该是字符串后得到这个?我不确定如何解决这个问题,因为我再次对Java很陌生。
答案 0 :(得分:4)
重命名您的方法,displayName不会覆盖 Object.toString()这就是您想要的;
// public String displayName(){ // <--- toString()
public String toString() {
return first + " " + middle + " " + last;
}
虽然有第二种选择(但注意toString()
的优点),那就是
public static void main(String[] args){
Name myName = new Name("Damon", "myMiddleName", "myLastName");
System.out.println("My Name: " + myName.displayName()); // <-- or this,
// System.out.println("My Name: " + myName); // <-- but the advantage of performing
// <-- an override on toString() is
// <-- that this implicit `toString()`
// <-- will work.
}
答案 1 :(得分:2)
您必须覆盖toString()
类似
public String toString()
{
return first+" "+ middle+" "+last;
}
答案 2 :(得分:1)
您的类名缺少toString()
方法,并从Object
继承默认值,用于输出类名和内存地址。
替换:
public String displayName(){
return first + " " + middle + " " + last;
}
使用:
public String toString() {
return first + " " + middle + " " + last;
}