當我將某些類的實例(例如ArrayList
)打印到流中時,例如, System.out.println(
ArrayList)
的實例,它不打印引用id(例如ArrayList @ 2144c53d),但是具有某些格式(例如[1,2,3,4])的實際值。我想知道如何爲我自己的課程做到這一點?我是否可能需要定義一些方法/實現一些接口?將類打印
將類打印
回答
當您嘗試使用System.out.print
打印類的對象ArrayList中,它會在該類toString()
方法。如果它沒有在給定的類中找到,那麼它會嘗試在其超類中查找該方法,直到它找到一個。然後打印toString()
返回的String
類中定義的方法。如果一個類不延長任何那麼它在默認情況下調用toString
方法Object
,它返回字符串是這樣的:
public String toString()
{
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
這就是爲什麼你要打印你自己的類對象時,得到這樣的類型的輸出。要打印不同的字符,你應該在你自己的類中覆蓋toString()
方法。例如:
public class MyClass
{
private int roll;
private String name;
MyClass(int roll,String name)
{
this.roll = roll;
this.name = name;
}
@Override
public String toString()
{
return "roll="+roll+",name="+name;
}
}
+1。我喜歡這個答案,因爲它解釋了爲什麼他會得到他所得到的,而不僅僅是給他解決方案。 – 2013-03-19 17:49:28
簡單:您覆蓋Object.toString()
方法。例如:
public class Person {
private final String name;
private final LocalDate birthDate;
public Person(String name, LocalDate birthDate) {
this.name = name;
this.birthDate = birthDate;
}
@Override public String toString() {
return String.format("%s (born %s)", name, birthDate);
}
}
對於更復雜的處理,你可能要考慮實施Formattable
接口 - 雖然我從來沒有親自這樣做我自己。
你是第一個回覆:)謝謝。 – user1377000 2013-03-19 17:28:49
@ user1377000他總是第一快。 – Pragnani 2013-03-19 17:33:37
。我想知道如何爲我自己的課程做到這一點?
通過重寫toString()
您班上的方法。
public class MyClass {
@override
public String toString(){
return "I am a legend MwhAhAH";
}
}
如果你沒有在你的類中重寫toStirng(),Object#toString()
將被調用,它返回yourclassname+ "@"+ hexnumberOfHashcode
。
public String toString() {
237 return getClass().getName() + "@" + Integer.toHexString(hashCode());
238 }
ArrayList中確實覆蓋toString方法:
public String toString() {
431 Iterator<E> i = iterator();
432 if (! i.hasNext())
433 return "[]";
434
435 StringBuilder sb = new StringBuilder();
436 sb.append('[');
437 for (;;) {
438 E e = i.next();
439 sb.append(e == this ? "(this Collection)" : e);
440 if (! i.hasNext())
441 return sb.append(']').toString();
442 sb.append(", ");
443 }
444 }
445
446}
覆蓋
toString()
方法。
此方法是基本給出輸出的對象類。
getClass().getName() + '@' + Integer.toHexString(hashCode())
要獲得其他任何你需要在你的課上覆蓋這個。
例如:當您打印的ArrayList這一翻譯的ArrayList其給出的ArrayList元素@ 2144c53d
public String toString() {
return "Stackoverflow";
}
很簡單,您應該只需要重寫toString()
方法。
類似以下內容將需要做:
public class MyClass {
@override
public String toString(){
return "My custom string, perhaps using some of the class propertis";
}
}
- 1. Java - 打印類
- 2. 打印類別打印數組?
- 3. 在我的打印類中打印PDF打印
- 4. 將解析類打印到UILabel(SWIFT)
- 5. 打印類型1.8
- 6. 打印成XPS文件,然後將其打印到打印機
- 7. JSF打印基類打印時繼承類的屬性
- 8. 打印所有定義的類的子類而不打印不滿意的類
- 9. 從類php打印數組
- 10. 打印數據類型char()
- 11. PHP LPR打印機類
- 12. 打印預覽+ PrintDialog類C#
- 13. Python:打印嵌套類
- 14. python:更改類的打印
- 15. Log4j打印擴展類名
- 16. 打印()方法不爲類
- 17. 如何打印Python類?
- 18. 類繼續打印無
- 19. 帶類的打印td
- 20. 打印使用PrintDialog類
- 21. C++打印靜態const類
- 22. 打印類似的步驟
- 23. 打印的div元素類
- 24. ComboBox打印對象類型
- 25. 將打印方法從PDF更改爲默認打印機以打印表格
- 26. 打印網頁將不會顯示打印視圖並打印空白
- 27. Java打印服務API:將作業發送到打印機後臺打印?
- 28. Java打印。使用「書本」類時僅打印一個頁面
- 29. 如何更改Android打印類中的默認打印選項
- 30. 用css媒體類型打印特定的div內容打印?
覆蓋toString()方法 – 2013-03-19 17:27:49