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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 武超 黑马帝   /  2011-12-4 20:07  /  6014 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 武超 于 2011-12-6 21:22 编辑

RuntimeException这个异常类在处理的时候有什么需要注意的?我没有看懂,不知道怎么用,什么时候用,还有throws+异常类和RuntimeException这个有什么区别?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

7 个回复

倒序浏览
1.RuntimeException,也就是运行时异常,表示你的代码本身存在BUG,比如你提到ArrayIndexOutOfBoundsException,数组下标越界,这个属于代码有问题,数组定义的长度不够实际使用,不处理肯定会报错,如果你操作某个模块发现能正常运行,那只是因为代码还没跑到这个错误的地方而已。。控制台一旦报RuntimeException,就必须要处理。。没有例外的。而且,处理RuntimeException,不是try-catch能解决的。。try-catch在这里使用毫无意义。
2.不是RuntimeException,就是编译时异常,异常只有这两种了。比如你在处理文件流时的I/O问题,就属于编译时异常。这个时候用thr{}catch 来捕获或者 throws即可。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
所有的Exception 要么被catch,要么被throw,除非这是一个RuntimeExeption。也就是说,通常的Exception一定要被处理,用try,catch处理者用throw将异常抛出,也即我们所说的检查异常,RuntimeExeption就是运行时异常,表示你的代码本身存在BUG,比如ArrayIndexOutOfBoundsException,数组下标越界,不处理肯定会报错,控制台一旦报RuntimeException,就必须要处理,代码本身有问题,一般要自己修改代码,可以不进行try...catch(当然你自己要处理也可以),一般称为不检查异常。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
RuntimeException是unhecked异常,它们由JVM抛出,你也可以抛出它,并且不必在异常声明(throws)中列出,这种异常我们不必处理,
如果RuntimeException没有被catch而到达mian()方法时,那么在程序退出前会自动调用该异常的printStackTrace()方法,打印该异常。
throws+异常类,如果抛出的异常是RuntimeException时调用者可以不用try catch,其它异常时需要try catch

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 韩军博 于 2011-12-4 22:18 编辑

楼主是木有搞明白编译时异常和运行时异常。
编译时异常(例如SQLException异常)如果不处理的话,编译就通不过;如果子模块处理不了抛出去的话,则上层的代码必须是要么用try/catch捕获进行处理,要么继续往外抛(往外抛的时候,代码模块上都要有声明 就是throws+异常类);
运行时异常是(例如RuntiimeExcpetion)是如果子模块处理不了了,则抛到上层模块,这时上层模块就可以有选择,如果觉得自己能处理,就try/catch捕获处理,要么可以抛到上层,也可以置之不理。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
wsssx 2011-12-5 11:32:39
地板
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
武超 黑马帝 2011-12-6 22:49:13
7#
恩 谢谢
回复 使用道具 举报
李明 黑马帝 2011-12-8 22:57:11
8#
异常分两类:编译时异常,和运行时异常也就是RuntimeException。运行时异常是不能被处理的异常。抛出异常可以在函数上用throws抛出,也可以在函数中用throw抛出。一般处理异常都是用try...catch方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马