toString方法见解#
方法简介
toString()方法其实是最高类Object类中的一种方法,在JDK API文档中的描述是这样的:
toString
public String toString()
返回该对象的字符串表示。通常,toString
方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
getClass().getName() + '@' + Integer.toHexString(hashCode())
-
返回:
该对象的字符串表示形式。
下面来通过代码体现它的作用,以及我们应该如何合理的理由它:
代码:
父类程序
package StudyNew.TRY;
public class TOString {
private String name; // 创建私有化成员变量
private int age;
public TOString() { //构建空参
}
public TOString(String name, int age) { //构建全参
this.name = name;
this.age = age;
}
//写上getter setter方法:
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;
}
public String toString(){ //覆写Object类中的.toString方法
return this.name
+this.age;
}
}
实现类程序
package StudyNew.TRY;
public class TOStringSHIXIAN {
public static void main(String[] args) {
TOString TO=new TOString("HSL",20); //创建对象
System.out.println(TO.toString);//重点在此
}
}
单独刨析:
输出处不写.toString
假如我们不在父类中覆写toString方法: .toString
直接在实现类中打印输出父类的类名,那将会出现以下结果:
package StudyNew.TRY;
public class TOStringSHIXIAN {
public static void main(String[] args) {
TOString TO=new TOString("HSL",20); //创建对象
System.out.println(TO);//直接输出对象
}
}
运行结果:
StudyNew.TRY.TOString@75412c2f
可以看到,实际上输出的是类的地址和其对应的哈希地址值
假如对实现类的程序稍作改动:
输出处写上.toString
package StudyNew.TRY;
public class TOStringSHIXIAN {
public static void main(String[] args) {
TOString TO=new TOString("HSL",20); //创建对象
System.out.println(TO.toString);//改动处,在实例化对象后面写上toString()方法,直接调用
}
}
运行结果:
StudyNew.TRY.TOString@50cbc42f
与之前的输出一样
也就是说这两者事实上调用的是同一个方法,不管在实例化对象后面写不写.toString,最终调用的都是它。
那么它是从哪来的呢?
覆写代码分析:
实际上在前面已经说过,他就是最高类Object类当中的一个方法,在实现类输出处写上父类名称时,不管在后面加不加.toString,效果都一样
但是,它输出的文件地址值和哈希地址值对我们貌似没有任何用处
所有我们利用此特性就可以通过.toString()取得一些对象的信息,此时,就需要对他进行覆写
代码:
public String toString(){
return "我叫"+this.name+
"我今年"+this.age+"岁了";
} //只需要在父类中加上对其覆写的方法,那么在调用时就会用我们自定义的覆写方法
以上代码的运行结果:
//我叫HSL我今年20岁了
总结
程序TOString类覆写了Object类中toString()方法,这样直接输出对象时调用的就是被TOString类覆写过的toString()方法了。