这里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); }
}
}
答案 0 :(得分:0)
当一个对象传递给System.out.println
时,它的toString()
方法被调用(因此可以显示该结果),无论这个对象是什么(例外也是对象)。
所以,当你这样做时:
catch(MyException exp) {
System.out.println(e);
}
System.out.println需要e
,请致电toString()
并将此结果显示在控制台上。
答案 1 :(得分:0)
由于toString()
是所有对象继承的Object
的一部分,System.out.println(Object o)
(out
是PrintStream
)知道有一个toString()
实现,它使用它(首先调用String.valueOf(Object o)
)。
由于toString
已被覆盖 - 它使用指定的实现。
打印一个对象,然后终止该行。此方法首先调用String.valueOf(x)来获取打印对象的字符串值,然后表现为调用print(String)然后调用println()。
答案 2 :(得分:0)
documentation of the PrintWriter.println(Object)
method说:
打印一个对象,然后终止该行。此方法首先调用
String.valueOf(x)
来获取打印对象的字符串值,然后就像调用print(String)
然后调用println()
一样。
方法String.valueOf(Object)
使用参数的toString()
方法,除非它为空。
这就是调用toString()
的原因。
答案 3 :(得分:0)
System.out.println
打印一个Object,然后终止该行。
此方法首先调用String.valueOf(x)
来获取打印对象的字符串值,然后就像调用print(String)
然后调用println()
一样。
String.valueOf(x)
,然后返回等于" null&#34 ;;的字符串。否则,obj.toString()
的值将被返回,在您的情况下,它是
输出字符串=自定义
答案 4 :(得分:0)
致电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