Java:Effective java学习笔记之 始终要覆盖toString方法
Posted JMW1407
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:Effective java学习笔记之 始终要覆盖toString方法相关的知识,希望对你有一定的参考价值。
Java 始终要覆盖toString方法
始终要覆盖toString方法
1、为什么要覆盖toString方法?
public class Person
protected String name;
protected int 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;
public Person(String name, int age)
super();
this.name = name;
this.age = age;
/*@Override
public String toString()
return "Person [name=" + name + ", age=" + age + "]";
*/
public static void main(String[] args)
Person s = new Person("liming", 6);
System.out.println(s);
如果不覆盖打印:
demo6.Person@1636731
覆盖打印:
@Override
public String toString()
return "\\nname: " + name + "\\nage: " + age;
输出
Person [name=liming, age=6]
虽然java.lang.Object提供了toString方法的一个实现,但它返回的字符串通常并不是类的用户所期望看到的。
尽管有人认为“Person@1636731”算得上简洁和易于阅读,但是与“Person [name=liming, age=12]”比较起来,它还算不上信息丰富的。它包含类的名称,以及一个“@”符号,接着是散列码的无符号十六进制表示法,例如“Person@1636731”。
2、始终要覆盖toString方法
覆盖toString就是为了调试或者打印的时候可以更直观的看到对象的有用的信息,所以建议写新写类的时候要覆盖toString方法。
个人理解:toString()
就是当把某一对象作为字符串输出时会调用这个方法。(比如:println(xx)
; "a"+xx
;,其实际上都可看成为println(xx.toString())
; "a"+xx.toString()
;
《Effective java》表述:
-
1、toString方法应该返回对象中包含的所有值得关注的信息
-
2、在实现toString时需要做一个决定:是否在文档中指定返回值得格式.
- 指定格式的好处是,它可以被用做一种标准的,明确的,适合人阅读的对象表示法,如果指定格式,最好再提供一个相匹配的静态工厂或构造器,以便程序员可以方便在对象和它的字符串表示法之间转换.
- 指定格式的坏处是:如果这个类被广泛使用了,那么一旦指定格式,就要一如既往
-
3、无论是否指定格式,都应该在文档中明确的表明意图
-
4、无论是否指定格式,都为toString返回值中包含的所有信息,提供了一种编程式的访问途径.
以上是关于Java:Effective java学习笔记之 始终要覆盖toString方法的主要内容,如果未能解决你的问题,请参考以下文章
Java:Effective java学习笔记之 避免使用终结方法
Java:Effective java学习笔记之 消除过期对象引用
Java:Effective java学习笔记之 列表优先于数组
Java:Effective java学习笔记之 用enum代替int常量