黑马程序员技术交流社区

标题: 异常问题 [打印本页]

作者: 汤芝    时间: 2012-8-20 12:33
标题: 异常问题
运行时异常与一般异常有何异同?
作者: 刘芮铭    时间: 2012-8-20 15:20
运行时异常指的是程序在编译时期能够顺利通过,运行时期出现的不可处理的异常!
一般异常会在编译时期提醒编译者加以修改,称为可以处理的异常

作者: 范泰洋    时间: 2012-8-20 15:26
本帖最后由 范泰洋 于 2012-8-20 16:15 编辑

异同:
编译时异常
           该异常在编译时,如果没有处理(没有抛也没有try),编译失败。
           该异常被标识,代表这可以被处理。
运行时异常(编译时不检测)
           在编译时,不需要处理,编译器不检查。
           该异常的发生,建议不处理,让程序停止。需要对代码进行修正。
作者: 牛杨    时间: 2012-8-20 16:09
本帖最后由 牛杨 于 2012-8-20 16:20 编辑

运行时异常与一般异常? 但是在java中异常只分为运行时异常和编译异常。不知道你这里说的一般异常是不是编译异常。但是只要理解了运行时异常和编译时异常就可以了。
编译时异常:我感觉这是比较严重的异常,因为这种异常的发生使程序编译都失败了。所以这种异常必须抛出或捕获之。(即便是程序没有发生这种异常,也必须要捕获之,或抛出之。)如果捕获之,一般处理方式就是捕获这个编译时异常并转换成其他形式的运行时异常。建议捕获这个编译时异常并转换成其他形式的运行时异常,但是并不建议一直用throws的方式抛出之。例如:
关于文件流的异常。
try
{
    FileWriter fw=new FileWriter("K:\\demo.txt"); //由于FileWriter的构造函数可能会抛出 IOException异常(这个异常是编译异常)所以必须对这个异常进行处理(处理方式可
                                                  //抛可捕获)即便是这句代码写得正确无误没有发生这种异常也必须要进行处理之,处理的方式一般都是捕获这个IOException
                                                 //异常并转换成其他的运行时异常,而不建议一直用throws的方式抛出之。
                                               
}
catch(IOException e)
{
     throw new RuntimeException("找不到指定的盘符!");
}
运行时异常:这类异常比较不太严重,因为虽然这种异常发生了,但是这种异常没发生之前的程序代码还是可以运行的。这类异常想处理就处理,不想处理也就算了!比如: 除数为0 的异常ArithmeticException异常。对于这种异常。
如果没有发生(也即除数不为0),你可以处理之(也是可抛可捕获)也可以不处理。
如果发生了异常,你也是想处理就处理(也是可抛可捕获),不想处理也就算了,如果你不处理,在运行程序的时候jvm会帮你采用默认的处理方式进行处理之。
总结:不论对于编译时异常还是运行时异常。如果你要处理,并且处理方式都是一直抛出之(throwthrows之)直到main方法也throws抛出之,那么最终会抛给jvm 。这时jvm会采用默认的异常处理方式进行处理之

希望对楼主有帮助哦!

作者: 汤芝    时间: 2012-8-20 16:21
问题已解决,谢谢哈!




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