黑马程序员技术交流社区

标题: 异常类中Exception和RuntimeException的区别是什么? [打印本页]

作者: Θ动@咚Θ    时间: 2013-11-12 19:35
标题: 异常类中Exception和RuntimeException的区别是什么?
今天看了老毕的教程,没有搞明白Exception和RunTimeException的区别,为什么用RunTimeException的时候方法体中都throw了,但是方法名后不用throws?
作者: Uncle.Lee    时间: 2013-11-12 19:54
RuntimeException是Exception的子类

异常分两类:
1,编译时被检测的异常

2,编译时不被检测的异常,运行时异常:RuntimeException和它的子类就属于这种运行时异常。
    非RuntimeException必须在方法上明确标识出来
    而RuntimeException以及它的子类异常,不必标识,可以不做处理。
   这就是RuntimeException的特别之处,需要额外注意
作者: 寻找资拥。    时间: 2013-11-12 20:14
Exception是最大的异常,其他所有的异常都是继承或者间接继承于它。
所以当你使用try catch时,只要捕捉了Exception异常,就一切都OK,不管你是数据越界还是什么空指针异常,所有的异常它都能搞定。
而RunTimeException是运行时异常,就是说只有代码在运行时它才会报错,不像编译时异常在编译时就会报错。
为什么用RunTimeException的时候方法体中都throw了,但是方法名后不用throws?你是说你在自定义方法里面抛出了这个异常是吧?
如果你在方法体里面手动抛出了这个异常,你没有使用try catch去捕获处理这个异常,你就需要在方法名后面throws这个异常。。
你使用了try catch捕获这个异常,那么这个异常就被抓住了,干掉了,就不需要去throws。

throw与throws的区别
        1.        throw:抛出异常:手动抛出异常  动词
        用法:  throw new 异常类();
        2. throws:申明异常(申诉):告诉调用这个方法的人这个方法
        可能有异常产生!!!-----名词
        throws用在方法后面。

不管是运行时异常还是编译时异常都是继承于Exception,都是Exception的儿子。

对于异常分两种:
1,编译时被检测的异常。
        
2,编译时不被检测的异常(运行时异常。RuntimeException以及其子类)
作者: 胡乃锋    时间: 2013-11-12 20:19
RunTimeException是运行时异常 继承于Exception 常见的空指针和下标越界都是运行时异常时,可处理也可不处理,通常由JVM管理,出现错误一直往上抛直到能遇到处理的办法,处理不了就一直到主线程main()向外抛出,并推出主线程.
checked Exception 为编译时异常,必须要有处理的办法 ,通常你写程序的时候eclipse会报错,提示该处有异常需要进行处理,这种异常就是编译时异常 必须要处理,要么抛,要么 try catch 否则编译失败。
向外抛编译时异常时需要在函数上进行throws声明声明,而抛运行时异常时时则不需要进行throws声明。
作者: Θ动@咚Θ    时间: 2013-11-12 20:43
谢谢各位~




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