java异常处理机制(二)之异常捕获和处理
try...catch
语法:
try { 可能发生异常的代码 } catch(可能出现异常的类型 标识符) { 这种异常出现之后的处理方式 }
没有异常,直接打印try中内容,再打印后续内容 (catch中不执行,不需要捕获)在往下执行正常代码
## 2.try...catch...catch
语法:
try { 可能出现异常的代码 } catch (异常类型1 异常对象名1) { 异常类型1出现之后的处理办法 } catch (异常类型2 异常对象名2) { 异常类型2出现之后的处理办法 } .... } catch (异常类型n 异常对象名n) { 异常类型n出现之后的处理办法 }
执行流程:
1、执行try中的内容,如果没有异常,try...catch语句直接结束
2、如果有异常,那么就在发生异常的代码位置直接跳转到catch块中,try中后面的代码就不再继续运行了
3、继续匹配各个catch块中的异常类型,从上到下,一旦匹配到某个catch声明的异常类型,就直接执行该catch块的处理方式。处理完成之后,try...catch语句就直接结束了,不会再去匹配后面其他的catch块的异常类型
注意事项:
1、如果在各个catch块中,出现了子父类的异常类型,那么子类异常的catch块,必须在父类异常catch块的上面,因为从上到下匹配方式,如果父类的catch块在上面,下面的catch块就没有出现的意义了,下面的catch块无法被运行到了。
2、在jdk1.7之后,可以对异常类型进行逻辑的或运算,使用|表示,多种异常类型,可以使用相同的处理方式:
catch(异常类型1 | 异常类型2 异常对象名称) { 异常类型1和2的共同处理方式 }
## 3.try..catch...finally
语法:
try { 可能发生异常的代码 } catch (可能发生的异常类型 异常对象名称) { 当前异常类型的处理方式 } finally { 一定要执行的 }
finally:一定要执行的代码
finally:也是一个代码块,在这个代码块中的代码,一定会执行,无论上面描述的哪种情况,都会执行。甚至在代码中有return语句,都会先执行finally中的代码。
注意事项:
如果代码中先执行了System.exit(0); 强制关闭了系统,finally就不会再执行。
4.try...finally
语法:
try { 可能发生异常的代码 } finally { 一定要执行的代码 }
作用:
1、无论try中的语句是否发生异常,finally中的代码都一定有执行的机会
2、如果有两句代码,都需要有执行的机会,不希望第一句的成功与否影响到第二句的执行机会,那么就把这两句代码分别放在try和finally中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!