黑马程序员技术交流社区

标题: 在异常处理中RuntimeException怎么用的 [打印本页]

作者: 武超    时间: 2011-12-4 20:07
标题: 在异常处理中RuntimeException怎么用的
本帖最后由 武超 于 2011-12-6 21:22 编辑

RuntimeException这个异常类在处理的时候有什么需要注意的?我没有看懂,不知道怎么用,什么时候用,还有throws+异常类和RuntimeException这个有什么区别?
作者: 常文艺    时间: 2011-12-4 20:57
1.RuntimeException,也就是运行时异常,表示你的代码本身存在BUG,比如你提到ArrayIndexOutOfBoundsException,数组下标越界,这个属于代码有问题,数组定义的长度不够实际使用,不处理肯定会报错,如果你操作某个模块发现能正常运行,那只是因为代码还没跑到这个错误的地方而已。。控制台一旦报RuntimeException,就必须要处理。。没有例外的。而且,处理RuntimeException,不是try-catch能解决的。。try-catch在这里使用毫无意义。
2.不是RuntimeException,就是编译时异常,异常只有这两种了。比如你在处理文件流时的I/O问题,就属于编译时异常。这个时候用thr{}catch 来捕获或者 throws即可。
作者: 许邦存    时间: 2011-12-4 21:08
所有的Exception 要么被catch,要么被throw,除非这是一个RuntimeExeption。也就是说,通常的Exception一定要被处理,用try,catch处理者用throw将异常抛出,也即我们所说的检查异常,RuntimeExeption就是运行时异常,表示你的代码本身存在BUG,比如ArrayIndexOutOfBoundsException,数组下标越界,不处理肯定会报错,控制台一旦报RuntimeException,就必须要处理,代码本身有问题,一般要自己修改代码,可以不进行try...catch(当然你自己要处理也可以),一般称为不检查异常。
作者: 段波    时间: 2011-12-4 21:21
RuntimeException是unhecked异常,它们由JVM抛出,你也可以抛出它,并且不必在异常声明(throws)中列出,这种异常我们不必处理,
如果RuntimeException没有被catch而到达mian()方法时,那么在程序退出前会自动调用该异常的printStackTrace()方法,打印该异常。
throws+异常类,如果抛出的异常是RuntimeException时调用者可以不用try catch,其它异常时需要try catch

作者: 韩军博    时间: 2011-12-4 22:17
本帖最后由 韩军博 于 2011-12-4 22:18 编辑

楼主是木有搞明白编译时异常和运行时异常。
编译时异常(例如SQLException异常)如果不处理的话,编译就通不过;如果子模块处理不了抛出去的话,则上层的代码必须是要么用try/catch捕获进行处理,要么继续往外抛(往外抛的时候,代码模块上都要有声明 就是throws+异常类);
运行时异常是(例如RuntiimeExcpetion)是如果子模块处理不了了,则抛到上层模块,这时上层模块就可以有选择,如果觉得自己能处理,就try/catch捕获处理,要么可以抛到上层,也可以置之不理。
作者: wsssx    时间: 2011-12-5 11:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: 武超    时间: 2011-12-6 22:49
恩 谢谢
作者: 李明    时间: 2011-12-8 22:57
异常分两类:编译时异常,和运行时异常也就是RuntimeException。运行时异常是不能被处理的异常。抛出异常可以在函数上用throws抛出,也可以在函数中用throw抛出。一般处理异常都是用try...catch方法。




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