为了账号安全,请及时绑定邮箱和手机立即绑定

这节中 chainTest 类的 test2() 方法 throw 了一个 RuntimeException 异常,为什么它不用 throws 声明?

test1() 方法有 throws DrunkException,但 test2() 不用,很迷。

正在回答

7 回答

在异常的第一节介绍里面有:异常分为非检查异常(RuntimeException)和检查异常。非检查异常是JVM自动抛出,自动捕获的。个人理解就是不需要throws声明的,由jvm自动接管,所以在main方法中不需要捕获也是可以的(已验证);当然也不用专门抛出,贴一个运行OK的版本。

https://img1.sycdn.imooc.com//5b7cc9d700018a5a10570889.jpg

1 回复 有任何疑惑可以回复我~
#1

阿Dine

可是在test2()中编译的时候为什么不会报错呢?
2018-08-22 回复 有任何疑惑可以回复我~
#2

呵呵__ 提问者

非常感谢!
2018-08-25 回复 有任何疑惑可以回复我~
#3

慕无忌4011151

谢谢我刚才也提问了同样的问题,解决了!!
2019-03-18 回复 有任何疑惑可以回复我~

用了 try catch 意味着方法体内的异常会被捕捉并进行一定的处理,所以就不用再声明throws了

0 回复 有任何疑惑可以回复我~

因为他在test2()中解决了这个异常。。。不用抛出让上一级解决。test1();就是这样的,他发现了异常,却没有解决,而是用throws声明了有异常要发生,但是没解决,交给了test2()来解决。

3 回复 有任何疑惑可以回复我~

查了一下:异常分两种,一种是可抓可不抓的,一种是必须抓的。可抓可不抓的异常就可以不用写throws,必须抓的异常那就必须要写throws了。

2 回复 有任何疑惑可以回复我~

throw是抛出异常,将drunk异常抛出,然后在test2中用try-catch捕捉抛出的这个异常,之所以test2不用是因为要捕捉到test1抛出的异常,要像test1一样抛出的话就没办法进行异常处理,捕捉到才能进入异常处理程序


2 回复 有任何疑惑可以回复我~

因为它有了try-catch块.emmm不知道说的对不对.我是这么理解的

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

这节中 chainTest 类的 test2() 方法 throw 了一个 RuntimeException 异常,为什么它不用 throws 声明?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信