[改善Java代码]推荐覆写toString方法
2016-04-24 22:24
399 查看
建议49: 推荐覆写toString方法
为什么要覆写toString方法,这个问题很简单,因为Java提供的默认toString方法不友好,打印出来看不懂,不覆写不行,看这样一段代码:
输出的结果是:Person@1fc4bec。如果机器不同,@后面的内容也会不同,但格式都是相同的:类名 + @ + hashCode,这玩意就是给机器看的,人哪能看得懂呀!这就是因为我们没有覆写Object类的toString方法的缘故,修改一下,代码如下所示:
打印输出:
如此就可以在需要的时候输出可调试信息了,而且也非常友好,特别是在Bean流行的项目中(一般的Web项目就是这样),有了这样的输出才能更好的debug,否则查找错误就如海底捞针呀!当然,当Bean的属性较多时,自己实现就不可取了,不过可以使用apache的commons工具包中的ToStringBuilder类,简洁、实用又方便。
可能有读者要说了,为什么通过println方法打印一个对象会调用toString方法?那是源于println的实现机制:如果是一个原始类型就直接打印,如果是一个类类型,则打印出其toString方法的返回值,如此而已!
为什么要覆写toString方法,这个问题很简单,因为Java提供的默认toString方法不友好,打印出来看不懂,不覆写不行,看这样一段代码:
public class Client { public static void main(String[] args) { System.out.println(new Person("张三")); } } class Person { private String name; public Person(String _name) { name = _name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
输出的结果是:Person@1fc4bec。如果机器不同,@后面的内容也会不同,但格式都是相同的:类名 + @ + hashCode,这玩意就是给机器看的,人哪能看得懂呀!这就是因为我们没有覆写Object类的toString方法的缘故,修改一下,代码如下所示:
public String toString(){ return String.format("%s.name=%s",this.getClass(),name); }
打印输出:
class cn.summerchill.test.Person.name=张三
如此就可以在需要的时候输出可调试信息了,而且也非常友好,特别是在Bean流行的项目中(一般的Web项目就是这样),有了这样的输出才能更好的debug,否则查找错误就如海底捞针呀!当然,当Bean的属性较多时,自己实现就不可取了,不过可以使用apache的commons工具包中的ToStringBuilder类,简洁、实用又方便。
可能有读者要说了,为什么通过println方法打印一个对象会调用toString方法?那是源于println的实现机制:如果是一个原始类型就直接打印,如果是一个类类型,则打印出其toString方法的返回值,如此而已!
相关文章推荐
- 使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示。
- 20145240 《Java程序设计》第三次实验报告
- 趣味素数-梅森尼数-java
- Java中处理异常throw和throws
- [改善Java代码]使用package-info类为包服务
- 20145105 《Java程序设计》第8周学习总结
- 20145307第八周JAVA学习报告
- [改善Java代码]不要主动进行垃圾回收
- JAVA JDK的动态代理反射实现
- Java中的super关键字
- [改善Java代码]推荐使用String直接量赋值
- Java String.split用法
- Elasticsearch升级1.5版本暴露jdk的bug
- java中匿名内部类的问题
- 20145231《Java程序设计》第三次实验报告
- 20145205 《Java程序设计》第8周学习总结
- 20145206《Java程序设计》实验三实验报告
- Java并发:主线程等待多个子线程执行完才继续执行
- Java并发:等待事件发生后所有线程继续执行
- 20145322何志威 《Java程序设计》第8周学习总结