黑马程序员技术交流社区

标题: RuntimeException问题 [打印本页]

作者: 熊冠银    时间: 2013-3-12 16:04
标题: RuntimeException问题
本帖最后由 熊冠银 于 2013-3-12 18:23 编辑

今天复习毕老师讲解异常的视频,RuntimeException之所以在函数内抛了在函数上可以不声明,是因为不声明异常,调用者不知道发生异常,该异常不需要被处理,当该异常发生时,让程序停掉,以让程序员修改代码。
我的问题是:RuntimeException在函数上声明了,这样不就是告诉调用者需要作出抛或者try的动作么?为什么也不需要对其处理?
作者: 黑马吕世成    时间: 2013-3-12 16:15
Runtime异常是unchecked异常类,java编译器不会检查一个方法是否会抛出该异常,所以我们也不需要捕捉。
作者: 张洪慊    时间: 2013-3-12 16:20
关于RuntimeException类:
如果在函数内容抛出异常,函数上可以不用声明,编译一样通过
如果在函数上声明了该异常.调用者可以不用进行处理(try..catch/throws).编译一样通过.
这里只是说不声明编译可以通过

如果你自定义的异常属于不可处理的->继承RuntimeException->不在函数上throws

作者: 冷叙辰    时间: 2013-3-12 16:24
RuntimeException,也就是运行时异常,表示你的代码本身存在BUG,比如ArrayIndexOutOfBoundsException,数组下标越界,这个属于代码有问题,数组定义的长度不够实际使用,不处理肯定会报错,如果你操作某个模块发现能正常运行,那只是因为代码还没跑到这个错误的地方而已。。控制台一旦报RuntimeException,就必须要处理没有例外的。而且,处理RuntimeException,不是try-catch能解决的。try-catch在这里使用毫无意义。
作者: 沉默de羔羊    时间: 2013-3-12 16:24
本帖最后由 沉默de羔羊 于 2013-3-12 16:39 编辑

其实你是混淆了意思:
我下面给出你解释,看你能不能理解,要是那里不明白,欢迎提问!
1.RuntimeException表示运行时异常,当程序中可能出现这类异常时,即使没有用try…catch语句捕获它,也没有用throws子句声明抛出它还是会编译通过。
2.但是除了RuntimeException类及其子类外,其他的Exception类及其子类中,当程序中可能出现这类异常时,要么用try…catch捕获,要么用throws子句声明抛出,否则编译不会通过。
也就是说:RuntimeException不处理,编译是可以通过的;但是其它的Exception类异常,不抛出来进行解决,都没法编译通过。
所以说RuntimeException可以不需要进行处理,但是你可以手动抛出来,比如常见的RuntimeException子类,IndexOuterOfBoundsException和NullPointerException都可以通过throw抛出的!
作者: 熊冠银    时间: 2013-3-12 16:32
没搞明白
作者: 沉默de羔羊    时间: 2013-3-12 17:00
熊冠银 发表于 2013-3-12 16:32
没搞明白

简单的说就是RuntimeException不处理,程序编译的时候,不会报错,只是在运行的时候,才会报错。
其它Exception类的异常,要是不处理,根本连编译都编译不了,别说你去运行了!

作者: fighting    时间: 2013-3-12 19:45
运行时异常,当然就是程序运行时出现的异常,
程序语法自然是没有问题,出现RuntimeException就是你的程序写的有问题,
而不是语法有问题
在程序设计时就应该避免出现RuntimeException异常,这是由程序员控制的




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