繁体   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