簡體   English   中英

用戶定義的異常中如何調用toString?

[英]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)outPrintStream知道存在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.printlnString.valueOf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM