2014-02-18 45 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; }