Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在java中重写方法toString()以打印类的实例变量是常见的做法?_Java_Tostring - Fatal编程技术网

为什么在java中重写方法toString()以打印类的实例变量是常见的做法?

为什么在java中重写方法toString()以打印类的实例变量是常见的做法?,java,tostring,Java,Tostring,正如我所了解的,甚至一些IDE已经将它嵌入其中,覆盖toString()方法以打印出类的所有实例变量 在object.java中定义的原始toString()定义如下: public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 通常的做法是将其覆盖为: public String toString() { return "

正如我所了解的,甚至一些IDE已经将它嵌入其中,覆盖
toString()
方法以打印出类的所有实例变量

object.java
中定义的原始
toString()
定义如下:

public String toString() {
  return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
通常的做法是将其覆盖为:

public String toString() {
  return "className{" +"var1="+var1+", var2="+var2+'}';
}

为什么我们不保留
toString()
方法的原始功能,并使用此功能创建一个新方法(使用不同的名称)?

我们可以。但是,其他类怎么会知道如何打印任意的子类呢?这些类完全不知道mynewostring方法中的子类

toString方法被设计为被重写来实现这一点。是的,它确实有默认行为,但不是很有用。它的作者想让你推翻它。重写它以返回通常使用的内容更有用,但您不必这样做。EmailAddress类的toString方法可以返回

public String toString() {
    return "EmailAddress{localPart = " + localPart + ", domainName = " + domainName + "}";
}
但通常返回以下内容更有用

public String toString() {
    return localPart + "@" + domainName;
}

重写toString()的原因是,每当向字符串中添加非String类型的对象时,编译器都会隐式调用toString()。 所以如果你有

MyObject o=new MyObject();
C="Hello " + o;
然后编译器将调用o.toString()以获得一个字符串,它可以将该字符串转换为“Hello”

我应该注意到,在对o调用toString()之前,它会检查o是否为null。如果o为null,它只生成字符串“null”


意见:toString()方法通常应仅用于调试(打印/日志),而不是作为正常程序流的一部分使用。

这对于基本调试和日志记录非常有用。当您试图了解应用程序的状态时,您希望在控制台或日志语句中打印哪个?toString被v.s.使用新方法重写的原因是当对象作为字符串求值时调用toString。例如,
System.out.println(object)
将调用toString方法。“在java中重写方法toString()以打印类的实例变量?”挑剔,但
toString
不应打印任何内容。它应该返回表示对象状态的字符串(对象的数据及其表示的内容)。如何以及何时打印它取决于类的用户。oop的优点之一是多态性。为什么把它扔掉?通过重写toString(),它将以这种方式出现在调用toString()的任何地方。