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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天看了老毕的教程,没有搞明白Exception和RunTimeException的区别,为什么用RunTimeException的时候方法体中都throw了,但是方法名后不用throws?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

4 个回复

倒序浏览
RuntimeException是Exception的子类

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

2,编译时不被检测的异常,运行时异常:RuntimeException和它的子类就属于这种运行时异常。
    非RuntimeException必须在方法上明确标识出来
    而RuntimeException以及它的子类异常,不必标识,可以不做处理。
   这就是RuntimeException的特别之处,需要额外注意

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
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以及其子类)
回复 使用道具 举报
RunTimeException是运行时异常 继承于Exception 常见的空指针和下标越界都是运行时异常时,可处理也可不处理,通常由JVM管理,出现错误一直往上抛直到能遇到处理的办法,处理不了就一直到主线程main()向外抛出,并推出主线程.
checked Exception 为编译时异常,必须要有处理的办法 ,通常你写程序的时候eclipse会报错,提示该处有异常需要进行处理,这种异常就是编译时异常 必须要处理,要么抛,要么 try catch 否则编译失败。
向外抛编译时异常时需要在函数上进行throws声明声明,而抛运行时异常时时则不需要进行throws声明。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
谢谢各位~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马