Java:Effective java学习笔记之 始终要覆盖toString方法

Posted JMW1407

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:Effective 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常量

Java:Effective java学习笔记之 复合优先于继承

Java:Effective java学习笔记之 接口优于抽象类