java.lang.Object的toString方法的实现:

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

这通常不是用户期望看到的,它包含类名称,一个“@”符号,以及散列码的无符号十六进制表示法。

toString通用约定指出,被返回的字符串应该是一个“简洁的,但信息丰富,并且易于阅读的表达形式”,进一步的约定指出,建议所有的子类都覆盖这个方法。

提供好的toString实现可以使类用起来更加舒适,当对象被传递给println、printf、字符串联操作符(+)以及assert或者被调试器打印出来时,toString方法会被自动调用。

提供好的toString方法,产生有用的诊断信息会非常容易:System.out.println("Failed to connect: " + phoneNumber);

toString方法应该返回对象中包含的所有值得关注的信息,如果对象很大,包含的状态信息难以用字符串表示,应该返回一个摘要信息。

在实现toString的时候,必须作出是否指定返回值的格式的决定。指定格式的好处是可以被用作一种标准的、明确的、适合人阅读的对象表示法。不足之处在于类一旦指定格式,必须始终如一地坚持这种格式。程序员将编写代码来解析这种字符串,如果将来改变了格式,他们的代码就无法正常运行了。总的来说不指定格式保留了灵活性。

两个建议:

1.无论是否决定指定格式,都应该在文档中明确地表明意图,通过文档注释来说明。

2.无论是否指定格式,都为toString返回值中包含的所有信息,提供一种编程式的访问途径,如使用getter方法提供。否则程序员必须去解析字符串,而这会导致大量不必要的工作量和增加程序出错的可能性。

第10条:始终要覆盖toString的更多相关文章

  1. Java 始终要覆盖toString

    java.lang.Object提供了toString方法的一个实现,它包含类的名称,以及一个“@”符号,接着是散列码的无符号十六进制表示法,例如“PhoneNumber@163b91”.在实际应用中 ...

  2. 始终要覆盖toString

    始终要覆盖toString   虽然java.lang.Object提供了toString方法的一个实现,但它返回的字符串通常并不是类的用户所期望看到的.它包含类的名称,以及一个"@&quo ...

  3. 第十条:始终要覆盖toString()方法

    Object类提供的toString()方法如下: public String toString() {    return getClass().getName() + "@" ...

  4. EffectiveJava(10)覆盖equals是视情况覆盖toString

    覆盖equals是视情况覆盖toString 1.toString返回字符串 className@163b91 -calssName 类的名称 @ @ 163b91 散列码的无符号十六进制表示法 2. ...

  5. 转:10条建议让你创建更好的jQuery插件

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使 ...

  6. 10 条建议让你创建更好的 jQuery 插件

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...

  7. 10条建议让你创建更好的jQuery插件

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使 ...

  8. 10条建议让你创建更好的jQuery插件(转载)

    为了避免重复造轮子,自己手动开发jquery 插件,让小组其他成员可以直接使用.学习开发中,看到Phillip Senn 写的 关于jquery 插件开发注意10点,转载之! ------------ ...

  9. 10条建议帮助你创建更好的jQuery插件

    本文总结了帮助你创建更好jQuery插件的10条建议.分享给大家供大家参考.具体说明如下: 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就 ...

随机推荐

  1. Spring ProxyFactory

    ProxyFactory 是 Spring AOP的实现方式之一.下面介绍下ProxyFactory的用法. 1.接口定义 public interface UserReadService { pub ...

  2. hdu3589 Jacobi symbol(二次剩余 数论题)

    本题的注意点:n=p1*p2*p3......Pm 解法:直接利用公式a^((p-1)/2)=(a/p)mod p 即可求解. #include<stdio.h> #include< ...

  3. ant中调用外部ant任务的两种方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  4. 【32】确定你的public继承塑模出Is-A关系

    1.public继承表示Is-A关系,也就是满足里氏代换.与之相对应的,private继承表示根据某物实现出,不满足里氏代换.子类对象初始化父类引用,编译通不过. 2.考虑下面的需求,企鹅继承鸟,Bi ...

  5. Android提供的系统服务之--TelephonyManager(电话管理器)

    Android提供的系统服务之--TelephonyManager(电话管理器) 转载请注明出处--coder-pig TelephonyManager的作用: 用于管理手机通话状态,获取电话信息(设 ...

  6. curl常用的5个例子(转)

    我用php ,curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等.但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者 ...

  7. Struts2 中的数据传输

    1.     如何将参数从界面传递到Action? 你可以把Struts2中的Action看做是Struts1的Action+ActionForm,即只需在Action中定义相关的属性(要有gette ...

  8. [Effective C++ --014]在资源管理类中小心copying行为

    第一节 <背景> 条款13中讲到“资源取得的时机便是初始化时机”并由此引出“以对象管理资源”的概念.通常情况下使用std中的auto_ptr(智能指针)和tr1::shared_ptr(引 ...

  9. 使用apache common-io 监控文件变化--转

    package common.io; import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.common ...

  10. Flume连接Kafka的broker出错

    在启动Flume的时候,出现下面的异常,但是程序照样能运行,Kafka也能够收到数据,只是偶尔会断点. 2016-08-25 15:32:54,561 (SinkRunner-PollingRunne ...