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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

基础视频中毕老师总结
对于异常分两种
1、编译时被检测的异常
2、编译时不被检测的异常,运行时异常,RuntimeException以及其子类
但是,下面这段Exception代码编译时,也没有报错。
class Demo
{
        int div(int a,int b)throws Exception //在功能上通过throws的关键字声明了该功能有可能会出现问题
        {
                return a/b;
        }
}
class ExceptionDemo
{
        public static void main(String[] args)
        {
        Demo d=new Demo();
        try
        {
                int x=d.div(4,0);
        System.out.println("x="+x);
        }
        catch (Exception e)//Exception e=new ArithmeticException();
        {
                System.out.println("除零啦");
                System.out.println(e.getMessage());// /by zero;
                System.out.println(e.toString());//异常名称:异常信息
                e.printStackTrace();//异常名称:异常信息,异常出现位置
        }
       
        System.out.println("over");
        }
}
这时为什么?哪位高手帮忙解答一下。

11 个回复

正序浏览
异常分为编译异常,就是编译时会报错,可以try,可以throw
还有运行时异常,就是runtimeException,编译时不会报错,就是编译可以通过,语法没有问题。
那么问题就出在其他问题,一般不好改
回复 使用道具 举报
LFW 中级黑马 2014-8-27 10:36:19
11#
这里本来就不会报错啊,你的div()可能会出错,所以用throws声明,那么调用div的程序员就知道,调用div必须进行抛出或处理,你都用try()catch()处理了,编译自然不会错。如果main函数调用div中的try()catch()你给删了,就编译出错了。但这时你将Exception改成RuntimeException又不会报错,是因为RuntimeException是编译时不会被检测的,它是运行时异常,运行时异常一旦出错程序就会立即停止。(仅从程序代码来将,不从什么时候该用RuntimeException什么时候用Exception的角度)
回复 使用道具 举报
忘壳 发表于 2014-8-22 17:33
运行时异常是不是只有RuntimeException呀,没报错因为我给catch处理了。

呃。。。我大概只能解释这么多了,能力有限Orz
回复 使用道具 举报
打印了5句话,但是没有打印X的值
回复 使用道具 举报
是不是打印了4句话,然后没有打印出X的值
回复 使用道具 举报
这一块我也没弄懂 同求大神解答
回复 使用道具 举报
胡天杭 发表于 2014-8-22 15:58
这是运行时异常,所以编译不会出错。你运行是异常又被try...catch...捕获,所以没报错! ...

运行时异常是不是只有RuntimeException呀,没报错因为我给catch处理了。
回复 使用道具 举报
建议LZ说下为什么会认为这个代码应该报编译时异常,让大家给解释下,不过LZ写的这个代码不报异常是正常的
回复 使用道具 举报
这是运行时异常,所以编译不会出错。你运行是异常又被try...catch...捕获,所以没报错!
回复 使用道具 举报
出异常也给你捕获处理了
回复 使用道具 举报
你都try  catch  处理了 怎么报错....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马