[英]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.