[英]How toString is called in userdefined Exception?
在这里,toString()方法如何不执行对它的显式调用? 谁能解释一下它的控制流程
class MyException extends Exception
{
String str1;
MyException(String str2) {
str1=str2;
}
public String toString(){
return ("Output String = "+str1) ;
}
}
class CustomException{
public static void main(String args[]){
try{ throw new MyException("Custom"); }
catch(MyException e){ System.out.println(e); }
}
}
当一个对象被传递给System.out.println
时,无论该对象可能是什么(异常也是对象),都会调用toString()
方法(这样就可以显示此结果)。
因此,当您这样做时:
catch(MyException exp) {
System.out.println(e);
}
System.out.println接受e
,将其称为toString()
并将此结果显示在控制台上。
由于toString()
是Object
一部分,所有对象都从System.out.println(Object o)
继承,所以System.out.println(Object o)
( out
是PrintStream
) 知道存在toString()
实现,并且使用它( String.valueOf(Object o)
首先被称为)。
由于toString
已被覆盖-它使用指定的实现。
打印一个对象,然后终止该行。 此方法首先调用String.valueOf(x)以获取打印对象的字符串值,然后像先调用print(String)然后再调用println()一样操作。
PrintWriter.println(Object)
方法的文档说:
打印一个对象,然后终止该行。 此方法首先调用
String.valueOf(x)
来获取打印对象的字符串值,然后像先调用print(String)
然后再调用println()
。
除非它为null,否则方法String.valueOf(Object)
使用参数的toString()
方法。
这就是为什么调用toString()
原因。
System.out.println
打印一个对象,然后终止该行。
此方法首先调用String.valueOf(x)
来获取打印对象的字符串值,然后像先调用print(String)
然后再调用println()
。
String.valueOf(x)
如果参数为null,则返回等于“ null”的字符串;否则返回false。 否则,返回obj.toString()
的值,在您的情况下,它是
输出字符串=自定义
当您调用System.out.println(e)
:
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
此方法调用String.valueOf(x)
:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
您看到obj.toString()
吗? 您可以在此处引用源代码PrintStream.println , String.valueOf
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.