`
javawebsoa
  • 浏览: 417752 次
社区版块
存档分类
最新评论

Java学习笔记:(10)始终要覆盖toString

 
阅读更多
与equals和hashCode不同的是,该条目推荐应该始终覆盖该方法,以便在输出时可以得到更明确、更有意义的文字信息和表达格式。这样在我们输出调试信息和日志信息时,能够更快速的定位出现的异常或错误。如上一个条目中PhoneNumber的例子,如果不覆盖该方法,就会输出PhoneNumber@163b91 这样的不可读信息,因此也不会给我们诊断问题带来更多的帮助。以下代码重载了该方法,那么在我们调用toString或者println时,将会得到"(408)867-5309"。
     @Override String toString() {
         return String.format("(%03d) %03d-%04d",areaCode,prefix,lineNumber);
     }
对于toString返回字符串中包含的域字段,如本例中的areaCode、prefix和lineNumber,应该在该类(PhoneNumber)的声明中提供这些字段的getter方法,以避免toString的使用者为了获取其中的信息而不得不手工解析该字符串。这样不仅带来不必要的效率损失,而且在今后修改toString的格式时,也会给使用者的代码带来负面影响。提到toString返回字符串的格式,有两个建议,其一是尽量不要固定格式,这样会给今后添加新的字段信息带来一定的束缚,因为必须要考虑到格式的兼容性问题,再者就是推荐可以利用toString返回的字符串作为该类的构造函数参数来实例化该类的对象,如BigDecimal和BigInteger等装箱类。
这里还有一点建议是和hashCode、equals相关的,如果类的实现者已经覆盖了toString的方法,那么完全可以利用toString返回的字符串来生成hashCode,以及作为equals比较对象相等性的基础。这样的好处是可以充分的保证toString、hashCode和equals的一致性,也降低了在对类进行修订时造成的一些潜在问题。尽管这不是刚性要求的,却也不失为一个好的实现方式。该建议并不是源于该条目,而是去年在看effective C#中了解到的。
分享到:
评论

相关推荐

    JAVA学习笔记

    JAVA学习笔记涵盖了Java编程语言中多个核心概念和特性。通过讲解this关键字、继承、static关键字和代码块、final关键字、多态、方法重写、抽象类与接口、封装与隐藏、垃圾回收、类组合、包装类、对象处理、类成员、...

    java学习笔记整理

    ### Java学习笔记整理 #### 1. Java简介 ##### 1.1 计算机编程和开发语言 计算机系统由硬件系统和软件系统组成。软件系统又进一步细分为系统软件和应用软件。其中,系统软件包括操作系统、编译系统、数据库系统等...

    java私塾学习笔记整理

    ### Java私塾学习笔记整理 #### 第一章:Java入门 **一、Java是什么?** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年推出。它旨在为跨平台开发提供一种通用的语言环境,使开发者能够在任何...

    java笔记 java笔记

    - **简单性**:Java语言设计简洁明了,易于学习和使用。 - **健壮性**:Java拥有严格的错误检测机制,有助于开发健壮的应用程序。 #### 1.2 运行原理 Java程序的运行分为几个阶段: 1. **编写**:使用文本编辑器...

    effective java 读书笔记

    - Item10:toString方法应返回对象状态的简洁表示,便于调试和日志记录。 - Item11:谨慎覆盖clone方法,因为它涉及到对象的深拷贝,可能需要实现`Cloneable`接口并处理异常。 - Item12:实现Comparable接口使...

    Java学习笔记一

    在Java学习笔记中,我们将详细探讨这些主题,并通过实例和练习来加深理解。例如,我们可以创建一个简单的继承和多态示例,如定义一个抽象的动物类,然后创建具体的狗和猫类,这两个子类可以覆盖父类的`makeSound()`...

    java学习笔记JDK6课件之十七

    Java学习笔记JDK6课件第17章主要讲解了注解(Annotation)的使用,注解是Java语言中一种非常重要的元数据机制,它允许程序员在源代码中嵌入额外的信息,这些信息可以被编译器、IDE或运行时环境读取,以实现特定的功能...

    java学习笔记

    Java是一种面向对象的编程语言,"java学习笔记"主要涵盖了以下几个关键知识点: 1. **面向对象编程 (OOP)**:OOP是Object Oriented Programming的缩写,它是一种编程范式,强调数据和操作数据的方法封装在一起,...

    Java入门学习笔记

    ### Java入门学习笔记 #### 一、Java特点与运行原理 **1.1 Java特点** - **简单性:** Java的设计使得它易于学习且避免了许多传统编程语言中存在的复杂性。 - **面向对象:** Java是一种纯面向对象的语言,支持...

    Java学习笔记,面向对象深化

    因此,所有Java对象都有`Object`类提供的方法,如`toString()`、`equals()`和`hashCode()`。 5. **`toString()`方法**: - `Object`类的`toString()`方法返回类名加`@`加16进制的哈希码。在打印或连接对象时,默认...

    java快速学习笔记(已有基础)

    对于已经有其他高级语言如C++或JavaScript基础的人来说,学习Java主要在于理解和掌握它与其他语言的不同之处,特别是在集合类和线程管理方面。 1. **类型转换**: - Java中基本类型与String之间的转换是常见的操作...

    Android学习笔记九:基本视图组件:Spinner

    本篇学习笔记将深入探讨Spinner的使用、工作原理以及如何自定义它来满足特定需求。 一、Spinner的基本用法 1. 添加Spinner到布局文件: 在XML布局文件中,通过`<Spinner>`标签添加Spinner,可以设置其属性如id、宽...

    java 讲师笔记

    - Java语言基础,覆盖了数据类型、变量、常量、运算符、流程控制语句、数组、字符串等基础概念。 - 面向对象编程(OOP)的核心概念,如类与对象、包、方法、引用、访问控制、构造器、继承、多态、抽象类、接口、内部类...

    0基础java笔记(自记)

    总结来说,从软件初始配置到Java基础知识、继承多态、多线程等内容,这些知识点覆盖了Java学习的各个方面,为初学者提供了一个全面的入门指南。通过理解和实践这些知识点,可以帮助开发者快速掌握Java编程的核心技能...

    Java学习笔记-个人整理的

    {10}反射}{141}{chapter.10} {10.1}Class}{141}{section.10.1} {10.1.1}Field}{145}{subsection.10.1.1} {10.1.2}Method}{145}{subsection.10.1.2} {10.1.3}Constructor}{145}{subsection.10.1.3} {10.2}其他...

    corejava培训笔记

    这篇培训笔记主要涉及了几个关键知识点:Object类、克隆、equals()方法、toString()方法以及字符串处理。 1. **Object类与垃圾回收机制** - Java的垃圾回收机制自动管理内存,当对象不再被引用时进行回收,提高了...

    JAVA课堂笔记基础-详细解释.doc

    以上内容覆盖了Java编程的基础知识点, 包括开发环境的配置、DOS下的程序运行、JVM的作用、代码格式化与文档生成、数据类型的特殊标记、面向对象编程的基本概念以及程序包的管理和使用等方面。这些知识点对于初学者来...

    Java JDK 6学习笔记——ppt简体版 第17章.ppt

    例如,在`CustomClass`中,如果父类没有`toString`方法,编译器会报错,提示该方法无法覆盖父类方法。`java.lang.Override`是一个Marker注解,意味着它没有成员,仅凭它的存在就具有特定含义。 2. `@Deprecated`:...

Global site tag (gtag.js) - Google Analytics