java异常处理的理解

异常的基础知识。【Java】异常处理详解_throws异常处理_Time<EveryThing>的博客-CSDN博客

  • 异常可以分为检查类异常和非检查类型异常。非检查指的是Error和RuntimeExcepion。Runtime异常是可被预测的异常,如:数组越界,空指针等等。这些异常是可被代码检测出来的。如果抛出此类异常,通常代表代码写的不是很好.所以尽量自己处理而不是tryCatch。

throws

checked类型异常

如果调用的方法里抛出检查类型异常,那么你的方法必须要么try catch,要么继续抛出(在方法名后throws)。

如果你手动throw一个检查类型异常,那么必须在方法名上throws。

不然不能编译,如图

 

 unchecked类型异常

根据我的测试,对于RuntimeException,加不加throws都一样。不加也能自动往上抛;加了也不会强制上层捕获。

异常如果中间不捕获,会层层往上抛。

捕获异常

throw会停止方法,后面的语句都不执行,且会按栈顺序层层上抛,哪怕是main方法。main抛出的异常给jvm处理。

所以异常不捕获可能会造成main方法停止,即程序结束。

示例程序:main->service(没有catch)->manager(throw Exception)

图1.捕获了异常, 继续执行

图  2. 不捕获异常,方法结束

       

图3.在中间捕获,上层可以正常运行

 

catch可以有多个,子类应该在父类上边。且catch只会按顺序匹配一个。

catch里面抛出异常,也会终止方法。

finally一定会执行。当try catch中有return时,会先把值存到局部变量,执行完finally在return这个值。

当finally语句中也有return时,会覆盖try/catch语句块的return,所以一般不要在finally中加return语句。

try不能省略,catch和finally能省略一个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值