关于异常throws & throw & try

throws是声明异常,在方法头上声明(XxxException异常类),调用该方法时,要么跟着声明相同的异常(或大于他的异常),要么就try处理异常。
throw 是在方法体内,抛出异常(异常对象 new XxxException();),一旦抛出,方法停止运行。但是调用该方法的调用者,不用声明或处理任何异常。是方法体内的语句,跟调用者没有关系,调用者只看方法头上有没有声明异常。
try catch 也就是处理异常,打印异常。调用该方法的调用者,不用声明或处理任何异常。如果try{}中的代码有异常,那么就不执行其中的代码,去执行catch中的代码,只要catch没有throw,那么代码将继续远行,毫无影响。
try之后的两个大坑:
1,关于捕获异常:
语句:p.xxxMethod();
你想要try它,而这个方法上没有声明异常,也就是你try不try它都不会报红。但你就是想try,那try的时候只能去catch非自定义的异常,要是想捕获自定义的,那么你只能去xxxMethod()这个方法头上去声明,要么编译都不通过。
2,关于finally:
你用了try+catch+finally 这样的格式,catch和finally中都写了return语句,而恰好捕获到异常了,执行到了catch中的代码,这时的返回值应该是哪一个return?答案:返回finally中的。finally中写的是最终要执行的代码,并且一定会执行,所以在遇到return语句的时候,系统会先去执行finally中的代码,再回来return终止。而在刚刚那种情况下,在finally中遇到了终止,很不幸,回不来了,直接终止就对了。同理,遇到try+catch+finally 之外的return,也一样。总之,不要跟finally中的return语句较量。

补充:
如果你在方法体{}1⃣️中抛异常,在不声明异常的情况下,只能抛出运行时异常RuntimeException,若是其他异常或者自定义异常,则必须在方法头上声明该异常,或或者比他大的异常。之前也说了,2⃣️对异常的处理(trycatch),是对方法头1⃣️上声明的异常感知的,(也就是在1⃣️方法头上声明的异常,是不得不处理的,一定会被处理,不会被无视),所以说2⃣️处理异常时,虽然可以捕获所有异常,但是我在可能有异常的方法1⃣️中,抛出了一种非运行时异常,这是他是不确定,到底会不会被处理的(因为是需要被处理的),所以必须要在方法头上声明,确保一定会被处理。 所以之前的说法,说我们不能捕获没有声明的自定义异常,跟这个说法不冲突,一个是针对方法1⃣️,一个是针对方法2⃣️

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值