2014-02-18 105 views
0

我想在Java中实现一个构造函数,我不知道我是否做错了什么,但是我总是得到垃圾输出。获取垃圾输出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); 

这是我所得到的每一次:

[email protected] 

有人能告诉我什么,我做错了什么?

+3

如果要以这种方式打印对象,则必须重写'toString()'方法。你看到的是toString的默认输出,即对象的类型和哈希码。 – csmckelvey

+0

这不是垃圾,这是对象的标识哈希码 –

+0

[这里是](https://www.google.com/search?q=java+override+tostring&rlz=1C1KMZB_enUS562US562&oq=java+override+tostring&aqs=chrome..69i57j0l5。 2986j0j7&sourceid = chrome&espv = 210&es_sm = 122&ie = UTF-8)谷歌搜索你。 – csmckelvey

回答

6

Java不知道你怎么想,除非你告诉它通过实现toString()做一个对象打印任何东西。如果不这样做,它将默认为Object.toString()以获取对象的字符串表示形式。 Object.toString()返回

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

它解释你看到的输出。

1

如果您在Java中打印对象,它将使用十六进制值打印类名称。

如果你想要你自己的东西,你必须重写toString()。

public void toString() 
{ 
    //print here this.Type +":"+ this.FName for fields you want. 
} 
0

每个Java对象都带有一个toString()方法。您将不得不重写它以获得所需的输出。我相信对象(内存地址)的hashCode正在被打印!

0

从Object.toString()文档:

返回该对象的字符串表示。通常,toString方法返回一个字符串,用于“文本地表示”此对象。结果应该是简明但内容丰富的表示 ,这对人们来说很容易阅读。建议所有 子类重写此方法。

Object类的toString方法返回由 其中物体是一个实例,所述-SIGN 字符'@”的类的名称的字符串,和的哈希 码的无符号十六进制表示法物体。换句话说,该方法返回一个字符串等于 ,它的值:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

因此,你必须做这个提供自己的toString方法:

@Override 

公共无效的toString (){return myString; }