黑马程序员技术交流社区

标题: 关于异常方面的问题 [打印本页]

作者: 巩彪    时间: 2012-8-12 19:23
标题: 关于异常方面的问题
编译时被检测异常与运行时异常的区别?
作者: 王健    时间: 2012-8-12 19:25
编译时被检测异常是在编译期间,其实就是javac的时候,判断的异常。这种是需要处理的。
运行时异常是在程序运行中出现的问题。其实就是执行java命令后出现的问题。这个是需要改代码,或者输入参数。
程序出现的不正常现象就是异常。
多个异常对象不断的抽取最终形成了异常体系。
这个体系的根类是Throwable。
Throwable下有两个大的分类:
        Error:不用处理的问题。
        Exception:需要编写代码处理的问题。
作者: 李志广    时间: 2012-8-12 21:49
本帖最后由 李志广 于 2012-8-12 21:52 编辑

异常有两种:
        编译时被检测异常
                该异常在编译时,如果没有处理(没有抛也没有try),编译失败。
                该异常被标识,代表这可以被处理。
        运行时异常(编译时不检测)
                在编译时,不需要处理,编译器不检查。
                该异常的发生,建议不处理,让程序停止。需要对代码进行修正。

希望对你有所帮助!!!{:soso_e100:}
作者: 牛杨    时间: 2012-8-13 01:35
本帖最后由 牛杨 于 2012-8-13 01:38 编辑

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

希望对楼主有帮助!





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