黑马程序员技术交流社区

标题: 彻底晕啦 [打印本页]

作者: 邵阳    时间: 2012-7-5 10:34
标题: 彻底晕啦
本帖最后由 邵阳 于 2012-7-5 10:58 编辑

今天看异常晕啦。
1:什么是抛出?什么是声明?
2:在什么情况下抛出?在什么情况下声明?
3:什么时候用throws,什么时候不需要用。
4:为啥必须用throws啊?已经有try,catch
5:毕老师说的调用者到底是谁啊?是用户还是程序员?为什么有的可以处理?有的让程序停止?
暂时就这么多吧。红色的是我最想知道的?
作者: 杨朔    时间: 2012-7-5 10:54
异常分为两类,一个是检查异常,一个是非检查异常。
检查异常也叫做非运行时异常,,也叫运行异常,这种异常必须被处理,如果不被处理,就不会编译通过。

非检查异常它们都是RuntimeException的子类,这种异常可处理也可不处理,可以直接抛出。也就是说
可以用throws。

throws关键字是用于方法体内部,用来抛出一个Throwable类型的异常。如果抛出了检查异常,则还应该在方法头部声明方法可能抛出的异常类型。
该方法的调用者也必须检查处理抛出的异常。如果所有方法都层层上抛获取的异常,最终JVM会进行处理,处理也很简单,
就是打印异常消息和堆栈信息。如果抛出 的是Error或RuntimeException,则该方法的调用者可选择处理该异常。
作者: 杨锦    时间: 2012-7-5 10:55
通常情况:函数内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。
异常分两种:
        1:编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。
        2:运行时异常,其中Exception有一个特殊的子类RuntimeException,以及RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。
编译时被检查的异常和运行时异常的区别:
        编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。
        声明的原因:是需要调用者对该异常进行处理。
        运行时异常如果在函数内被抛出,在函数上不需要声明。
        不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。
定义异常处理时,什么时候定义try,什么时候定义throws呢?
        功能内部如果出现异常,如果内部可以处理,就用try;
        如果功能内部处理不了,就必须声明出来,让调用者处理。

作者: 艾衍年    时间: 2012-7-5 23:49
对于第五个问题
毕老师所说的调用者,是指,调用抛出异常方法的对象,不是用户也不是程序员。
对于程序运行出现的问题 可以处理的叫Exception,不可以处理的叫Error。
比如除数是0,这是异常,除数是0了,程序就没有运行的必要了,虚拟机就停止程序并给出异常报告。这时可以用try  catch语句进行处理,catch处理后,主函数继续运行。
对于Error就处理不了,try catch也不行,程序都没运行呢。




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