我正在尝试用Java实现构造函数,我不知道我做错了什么,但是我一直在垃圾输出。
这是我正在尝试将值赋给的变量:
private static Employee employee;
这就是我试图分配的方式:
employee = new Employee(empType, empFName, empLName, empBDate, empGender, empHireDate, empReleaseDate, empBaseSalary);
这是类和构造函数:
public class Employee {
private String Type;
private String FName;
private String LName;
private Date BDate;
private String Gender;
private Date HireDate;
private Date ReleaseDate;
private double BaseSalary;
public Employee(String type, String fname, String lname, String bdate, String gender, String hire, String release, double salary){
this.Type = type;
this.FName = fname.toUpperCase();
this.LName = lname.toUpperCase();
this.BDate = new Date(bdate);
this.Gender = gender;
this.HireDate = new Date(hire);
if (release == "null"){
this.ReleaseDate = null;
}
else if(release != "null"){
this.ReleaseDate = new Date(release);
}
this.BaseSalary = salary;
}
}
当我尝试打印时,只是为了测试它,这就是我打印它的方式:
System.out.println(employee);
这就是我每次都得到的:
Employee@4c264dd8
有人能告诉我我做错了吗?
答案 0 :(得分:6)
Java不知道如何打印对象,除非您通过实现toString()
告诉它该做什么。如果不这样做,它将默认为Object.toString()
以获取对象的字符串表示形式。 Object.toString()
返回
getClass().getName() + '@' + Integer.toHexString(hashCode())
解释了你所看到的输出。
答案 1 :(得分:1)
如果在Java中打印Object,它将打印具有十六进制值的类名。
如果你想要自己的东西,你必须覆盖toString()。
public void toString()
{
//print here this.Type +":"+ this.FName for fields you want.
}
答案 2 :(得分:0)
每个Java Object都附带一个toString()方法。您将必须覆盖它以获得所需的输出。我相信对象的hashCode(内存地址)正在打印!
答案 3 :(得分:0)
来自Object.toString()docs:
返回对象的字符串表示形式。一般来说, toString方法返回一个“文本表示”的字符串 宾语。结果应该是简洁但信息丰富的表示 一个人很容易阅读。建议所有人 子类重写此方法。
Object类的toString方法返回一个由。组成的字符串 对象是实例的类的名称,at-sign 字符“@”,以及散列的无符号十六进制表示 对象的代码。换句话说,此方法返回一个相等的字符串 价值:
getClass().getName() + '@' + Integer.toHexString(hashCode())
因此,您必须通过以下方式提供自己的toString方法:
@Override
public void toString(){return myString; }