标题:java 中接收异常时 为什么 Exception e.toStirng()会相当于调用子类的方法 ...
只看楼主
少林小和尚
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2013-3-31
结帖率:73.68%
已结贴  问题点数:18 回复次数:3 
java 中接收异常时 为什么 Exception e.toStirng()会相当于调用子类的方法?
package myexception;



 class MyException  extends Exception
{
    private String  message;
    MyException()
    {   
    }
    MyException(String s)
    {
        this.message=s;
    }
    public String toString()
    {
        String s="您输入的有误";
        return s;
    }
}

public class TestMyException
{
    public static void main(String[] args)
    {
        //int a=1;
        int b=0;
        try
        {
            if(b==0)
                throw new MyException();
        }
        catch(Exception e)
        {
            //e.printStackTrace();
            System.out.println(e.toString());               //这里的输出是:您输入的有误,但是这个输出是子类的方法,e是Exception类型,是我自              //                                                                         定义异常类的父类,为什么会输出呢??并且toSting方法提示时显示的是Throwable类中  //                                                                          的方法??   
        }
    }
}


新手  求大神解答???拜谢!!
搜索更多相关主题的帖子: message private package public return 
2014-10-28 23:27
少林小和尚
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2013-3-31
得分:0 
咋没人回呢??
2014-10-29 21:57
日知己所无
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:38
帖 子:427
专家分:2071
注 册:2014-3-22
得分:18 
程序代码:
class MyException extends Exception {
    private String message;

    MyException() {
    }

    MyException(String s) {
        this.message = s;
    }

    public String toString() {
        String s = "您输入的有误";
        return s;
    }
}

public class TestMyException {
    public static void main(String[] args) {
        int b = 0;
        try {
            if (b / 0 == 0)
                throw new MyException();
        } catch (MyException e) {
        } catch (Exception e) {
            // e.printStackTrace();
            System.out.println(e.toString());
            // 这里的输出是:您输入的有误,但是这个输出是子类的方法,e是Exception类型,是我自
            // 定义异常类的父类,为什么会输出呢??并且toSting方法提示时显示的是Throwable类中
            // 的方法??
        }
    }
}


运行结果:
java.lang.ArithmeticException: / by zero

如果你catch了MyException,并且确实抛出的是MyException,那么就会输出自己定义的子类的异常信息
如果你没明确catch MyException,仅catch Exception,结果和上面是一样的

即使你catch了MyException,但是抛出的不是MyException,那么输出的是Exception的异常信息

说来说去,父类更加通用,这么记就能记住了
2014-11-01 11:49
小码农
Rank: 9Rank: 9Rank: 9
来 自:大山里
等 级:蜘蛛侠
威 望:7
帖 子:151
专家分:1198
注 册:2014-11-8
得分:0 
楼上说的对,捕获了Exception后,会检查异常的类型,然后根据异常类型来调用对应的方法。我的理解是这样

沉淀自己,厚积薄发!
2014-11-08 21:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-437829-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.116799 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved