黑马程序员技术交流社区

标题: 自定义异常的toString函数调用问题 [打印本页]

作者: daoyua    时间: 2013-12-31 16:56
标题: 自定义异常的toString函数调用问题
本帖最后由 daoyua 于 2013-12-31 21:13 编辑

class DemoException extends Exception
{
        DemoException(String msg){
                super(msg);        
        }
}

        class Demo
{
        int div(int a,int b) throws DemoException //这里抛出异常是为了调用的时候注意,如果不用呢
                                {
                                        if(b<0)
                                                throw new DemoException("除数为负的异常");
                                        return a/b;
                                }
}

class Test
{
        public static void main(String args[]){
                try{
                        Demo d=new Demo();
                        int i=d.div(3,-1);
                        System.out.println("无异常");
                }
                catch(DemoException e)
                {
                        System.out.println("异常");
                        System.out.println(e.toString());  //我主要问为什么toString()怎么知道打出MESG的内容

                        //e.printStackTrace();
                }
        }
}
作者: doitforyou    时间: 2013-12-31 19:28
^_^,这个问题我也遇到过,异常都会继承一个Throwable类的,你在自定义异常的时候使用了
super(msg),父类也被初始化了,同时你继承的还有父类的方法:
这是Throwable源码中的toString方法,message就是你传入的msg.
public String toString() {
        String s = getClass().getName();
        String message = getLocalizedMessage();
        return (message != null) ? (s + ": " + message) : s;
    }
当你调用toString的时候你调用的是继承的toString,所以就会打印这些消息了。
权威性我不保证,这是我自己琢磨的。你参考下吧
作者: 悠然的我    时间: 2013-12-31 19:33
以下叙述摘自JDK1.6API文档,应该说的很清楚了吧
public String toString()返回此 throwable 的简短描述。结果是以下字符串的串联:
此对象的类的 name
": "(冒号和一个空格)
调用此对象 getLocalizedMessage() 方法的结果
如果 getLocalizedMessage 返回 null,则只返回类名称。

你自定义异常

getLocalizedMessage
public String getLocalizedMessage()创建此 throwable 的本地化描述。子类可以重写此方法,以便生成特定于语言环境的消息。对于不重写此方法的子类,默认实现返回与 getMessage() 相同的结果。

返回:
此 throwable 的本地化描述。

getMessage
public String getMessage()返回此 throwable 的详细消息字符串。
引用API文档结束。
少年,普通异常是可以处理的,你要是不抛,说明它只有Runtime异常呗,除数都负数了,编译器就帮你处理了。你在错误发生前就抛了异常,它就可处理了呗。

作者: daoyua    时间: 2013-12-31 21:11
懂了,你们讲的真好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2