A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© daoyua 中级黑马   /  2013-12-31 16:56  /  1318 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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();
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
^_^,这个问题我也遇到过,异常都会继承一个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,所以就会打印这些消息了。
权威性我不保证,这是我自己琢磨的。你参考下吧

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
以下叙述摘自JDK1.6API文档,应该说的很清楚了吧
public String toString()返回此 throwable 的简短描述。结果是以下字符串的串联:
此对象的类的 name
": "(冒号和一个空格)
调用此对象 getLocalizedMessage() 方法的结果
如果 getLocalizedMessage 返回 null,则只返回类名称。

你自定义异常

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

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

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

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
懂了,你们讲的真好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马