我沒有underst爲什麼DATE2印刷2016年4月10日,
隨着MyDate
類及其toString()
方法,System.out.println(date2)
應打印4/10/2016
,因爲一個int
不是字符串formater
,因此不加0
前綴。
public class MyDate{
public int day;
public int month;
public int year;
...
public String toString(){
return month + "/" + day + "/" + year;
}
...
}
編輯發表評論
如你初學者,我會盡量分解,但保持簡單。
你的審訊來自什麼這個方法的作用:
System.out.println(date2);
第一:你要明白這行的意思。
這裏,調用System
類的out
PrintStream
字段的println()
方法和你提供作爲該方法的date2
變量這是MyDate
實例的參數。
你應該感興趣的是println()
。
這個命名可能會讓你猜測它與某個東西的顯示有關係,但情況卻是如此,但沒有什麼比javadoc和類的源代碼更好理解它。
println()
是PrintStream
的重載方法。所以你必須確定調用哪一種方法。作爲參數與MyDate
兼容的類型的單一方法是void java.io.PrintStream.println(Object x)
。 有關信息,所有類都從Object
類派生,因此MyDate
是一個Object
。
看其的Javadoc:
java.io.PrintStream中
空隙java.io.PrintStream.println(對象X)
打印Object,然後終止線路。此方法首先調用 String。valueOf(x)獲取打印對象的字符串值,那麼 的行爲就像調用print(String)然後println()一樣。
參數:x要打印的對象。
這是相當清楚的方法做什麼:
但是String.valueOf(x)
是什麼?
有一次,Javadoc和源代碼將幫助您:
/**
* Returns the string representation of the {@code Object} argument.
*
* @param obj an {@code Object}.
* @return if the argument is {@code null}, then a string equal to
* {@code "null"}; otherwise, the value of
* {@code obj.toString()} is returned.
* @see java.lang.Object#toString()
*/
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
它返回的obj
參數toString()
方法的結果,如果obj
不爲空,otherwhise返回「空」字符串。
現在回到您的代碼。
裏面,你宣佈這兩種方法:
public String toString1(){
return day + "/" + month + "/" + year;
}
public String toString(){
return month + "/" + day + "/" + year;
}
toString()
因此邏輯上叫做,你應該刪除或因爲它是容易出錯的命名命名toString1()
方法。
如果您想根據多種格式來格式化您的MyDate
實例,您應該有兩種方法來執行它,但是您應該避免將自定義方法與toString()
方法混合。
你可以有例如:
public String toStringInDDMMYYYY(){
...
}
public String toStringInMMDDYYYY(){
...
}
另外,你可以使用SimpleDateFormat
格式化您的日期和使用Date
對象,而不是定製Date
對象,但是當你在Java中開始,我可以理解你考什麼不同的東西。
你期望輸出什麼? –
所以你想知道爲什麼向'toString'方法名添加任意數字不算作「工作」? – Tom
嘗試使用代碼,norepro。 – Compass