如何在userdefined Exception中调用toString?

时间:2015-08-10 08:02:05

标签: java tostring

这里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); }
    }
}

5 个答案:

答案 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)outPrintStream知道有一个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()一样。

如果参数为null,则返回

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.printlnString.valueOf

参考源代码