[转载] java重写toString()方法
參考鏈接: 在Java中重寫toString()
前言: 在你興高采烈的寫完一個(gè)類,創(chuàng)建測(cè)試類時(shí),創(chuàng)建對(duì)象,傳入?yún)?shù),調(diào)用對(duì)象,以為會(huì)得到參數(shù)值,但突然發(fā)現(xiàn)輸出的是“ 類名@什么東東?(其實(shí)是散列碼,也是16進(jìn)制的哈希值哈)”,反復(fù)檢查代碼,但不知怎么修改。我不知道你們有沒有這種情況發(fā)生,但是我經(jīng)常就有,原因當(dāng)然是因?yàn)椴涣?xí)慣重寫toString方法和基礎(chǔ)知識(shí)還不足導(dǎo)致的啦。還是要加油呀!所以記錄一下學(xué)習(xí)的toString()方法。?
1.1 在Object類中有一個(gè)重要的方法:toString()方法。?
作用:用于返回表示對(duì)象值的字符串?
1.2 為啥要重寫toString方法呢??
Object類中的toString方法返回的是什么呢?我們打開toString源碼發(fā)現(xiàn):?
? ? public String toString() {
? ? ? ? return getClass().getName() + "@" + Integer.toHexString(hashCode());
? ? }
?
返回的字符串是:類名@散列碼。 那為什么其它類的對(duì)象返回的也是這樣的形式呢?因?yàn)樗械念惖某惗际荗bject類。(可在類中按住ctrl+t查看繼承關(guān)系)?
例如: 創(chuàng)建一個(gè)People類:?
public class People {
? ? private String name;
? ? private int age;
? ? public People(String name,int age) {
? ? ? ? this.name = name;
? ? ? ? this.age = age;
? ? }
? ? public String getName() {
? ? ? ? return name;
? ? }
? ? public void setName(String name) {
? ? ? ? this.name = name;
? ? }
? ? public int getAge() {
? ? ? ? return age;
? ? }
? ? public void setAge(int age) {
? ? ? ? this.age = age;
? ? }
}
?
?
測(cè)試類:?
/**
?* toString方法的調(diào)用
?* @懶惰的小黑
?*
?*/
public class toStringTest {
? ? public static void main(String[] args) {
? ? ? ? People p = new People("懶惰的小黑",20);
? ? ? ? System.out.println(p);? ? ? ? ? ? ? //p會(huì)自動(dòng)調(diào)用toString方法
? ? ? ? System.out.println(p.toString());? ? //手動(dòng)調(diào)用
? ? }
}
?
?
執(zhí)行結(jié)果: com.xiaohei.text.People@279f2327 com.xiaohei.text.People@279f2327?
但是你想輸出的并非是這樣的結(jié)果,而是想輸出對(duì)象的具體描述(name和age),所以需要在類中重寫toString方法。 重寫toString方法:?
? ? public String toString() {
? ? ? ? return "[name = " + getName() + ",age = "+ getAge() + "]";
? ? }
?
測(cè)試:?
? ? ? ? People p = new People("懶惰的小黑",20);
? ? ? ? System.out.println(p);? ? ? ? ? ? ? //p會(huì)自動(dòng)調(diào)用toString方法
?
執(zhí)行結(jié)果: [name = 懶惰的小黑,age = 20]?
實(shí)際上,還可以設(shè)計(jì)的更好一些。最好通過getClass().getName() + 類的描述:獲取類名的字符串(地址)+類的描述。 例:?
? ? public String toString() {
? ? ? ? return getClass().getName() + "[name = " + getName() + ",age = "+ getAge() + "]";
? ? }
?
測(cè)試: 同上例 執(zhí)行結(jié)果: com.xiaohei.text.People[name = 懶惰的小黑,age = 20]?
注意: 此處的getClass().getName()中的getName并非People類中的getName方法!?
1.3 toString方法也可供子類使用,子類只需調(diào)用super.toString()。?
例如: 創(chuàng)建子類:?
class Teachers extends People{
? ? private int salary;
? ? public Teachers(String name, int age,int salary) {
? ? ? ? super(name, age);
? ? ? ? this.salary = salary;
? ? }
? ? public int getSalary() {
? ? ? ? return salary;
? ? }
? ? public void setSalary(int salary) {
? ? ? ? this.salary = salary;
? ? }
? ? public String toString() {
? ? ? ? return super.toString() + ",salary = " + getSalary();
? ? }
}
?
測(cè)試:?
public class toStringTest {
? ? public static void main(String[] args) {
? ? ? ? Teachers t = new Teachers("懶惰的小黑",20,5000);
? ? ? ? System.out.println(t);
?
? ? }
}
?
?
執(zhí)行結(jié)果: [name = 懶惰的小黑,age = 20],salary = 5000?
1.4 數(shù)組類型調(diào)用toString()方法?
數(shù)組繼承了Object類中的toString方法,數(shù)組類型會(huì)按舊格式打印。?
例如:?
public class ArraytoStringTest {
? ? public static void main(String[] args) {
? ? ? ? int[] a = {5,6,2,1,3};
? ? ? ? System.out.println(a);? ? ? ? ? ? //自動(dòng)調(diào)用toString方法
?
執(zhí)行結(jié)果:[I@1f32e575 注:[I 表明是一個(gè)整形數(shù)組。?
所以我們需要調(diào)用Array.toString 方法 例如:?
import java.util.Arrays;
?
public class ArraytoStringTest {
? ? public static void main(String[] args) {
? ? ? ? int[] a = {5,6,2,1,3};
? ? ? ? String a1 = Arrays.toString(a);
? ? ? ? System.out.println(a1);
? ? }
}
?
?
執(zhí)行結(jié)果:[5, 6, 2, 1, 3]?
說明:為什么會(huì)出現(xiàn)這種形式呢?按住ctrl點(diǎn)擊toString方法,查看源碼:?
? ? public static String toString(int[] a) {
? ? ? ? if (a == null)
? ? ? ? ? ? return "null";
? ? ? ? int iMax = a.length - 1;
? ? ? ? if (iMax == -1)
? ? ? ? ? ? return "[]";
?
? ? ? ? StringBuilder b = new StringBuilder();
? ? ? ? b.append('[');
? ? ? ? for (int i = 0; ; i++) {
? ? ? ? ? ? b.append(a[i]);
? ? ? ? ? ? if (i == iMax)
? ? ? ? ? ? ? ? return b.append(']').toString();
? ? ? ? ? ? b.append(", ");
? ? ? ? }
? ? }
?
注意:打印多維數(shù)組則需調(diào)用Arrays.deepToString()方法?
總結(jié)提醒:建議類中都要重寫toString方法,方便后面程序員的調(diào)用!
總結(jié)
以上是生活随笔為你收集整理的[转载] java重写toString()方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 链接远程oracle,PHP连接
- 下一篇: as模拟器文件夹路径_EGG Switc