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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊冠银 中级黑马   /  2013-3-12 16:04  /  1842 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 熊冠银 于 2013-3-12 18:23 编辑

今天复习毕老师讲解异常的视频,RuntimeException之所以在函数内抛了在函数上可以不声明,是因为不声明异常,调用者不知道发生异常,该异常不需要被处理,当该异常发生时,让程序停掉,以让程序员修改代码。
我的问题是:RuntimeException在函数上声明了,这样不就是告诉调用者需要作出抛或者try的动作么?为什么也不需要对其处理?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
Runtime异常是unchecked异常类,java编译器不会检查一个方法是否会抛出该异常,所以我们也不需要捕捉。
回复 使用道具 举报
关于RuntimeException类:
如果在函数内容抛出异常,函数上可以不用声明,编译一样通过
如果在函数上声明了该异常.调用者可以不用进行处理(try..catch/throws).编译一样通过.
这里只是说不声明编译可以通过

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

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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

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

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
没搞明白
回复 使用道具 举报
熊冠银 发表于 2013-3-12 16:32
没搞明白

简单的说就是RuntimeException不处理,程序编译的时候,不会报错,只是在运行的时候,才会报错。
其它Exception类的异常,要是不处理,根本连编译都编译不了,别说你去运行了!
回复 使用道具 举报
运行时异常,当然就是程序运行时出现的异常,
程序语法自然是没有问题,出现RuntimeException就是你的程序写的有问题,
而不是语法有问题
在程序设计时就应该避免出现RuntimeException异常,这是由程序员控制的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马