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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 多此一举 中级黑马   /  2014-7-4 20:26  /  1077 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo {
        int div(int a, int b) {
                if (b == 0) {
                        throw new ArithmeticException("被零除了");
                }
                return a / b;
        }
}

public class ExceptionDemo {

        public static void main(String[] args) {
                Demo d = new Demo();
                try {
                        int num = d.div(4, 0);
                        System.out.println(num);
                } catch (Exception e) {
                        System.out.println(e.toString());
                }

                System.out.println("over");
        }

}
毕老师说RuntimeException及其子类不用声明直接抛出,程序停止不再执行,但是这里为什么能输出"over",而将try catch去掉后就没有输出"over",直接中断程序。

3 个回复

倒序浏览
因为你在try-catch中捕获了异常,系统认为你已经将异常给解决了,try块后的语句照样被执行。
Exception 是异常类的基类,运行时异常也是可以被Exception捕获并处理的。
回复 使用道具 举报
程序从main方法开始执行,先创建Demo类的实例对象,接着通过对象调用Demo类的div方法,由于做了try/catch处理,就告诉了虚拟机已经获取到异常并处理了,不用停止程序,这样先执行 System.out.println(e.toString());打印错误信息,然后打印over;没有try/catch处理的话,在调用div(4/0)时就出异常了,程序会立刻停掉,将异常抛出,执行不到打印over的语句,所有没有输出“over”。
回复 使用道具 举报
异常捕获之后下面的语句会继续运行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马