本帖最后由 牛杨 于 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会采用默认的异常处理方式进行处理之。
希望对楼主有帮助! |