如何在try-with-resources语句中调用reportAbc等自定义方法
解决方案
try-with-resources 语法完全支持搭配 finally 块使用,你可以直接保留 finally 块调用 reportAbc(),逻辑和你原有写法完全一致。
执行顺序说明
try-with-resources 会自动按声明逆序关闭资源,执行顺序为:
- 执行
try代码块内的业务逻辑 - 自动关闭所有声明在
try括号内的AutoCloseable类型资源 - 如果抛出异常,进入匹配的
catch块执行异常处理 - 最后执行
finally块内的代码
通用兼容代码示例
try ( // 此处声明你需要自动关闭的资源,例如文件流、数据库连接等 FileInputStream fis = new FileInputStream("test.txt"); BufferedInputStream bis = new BufferedInputStream(fis) ) { // 原有 try 块内的业务逻辑 } catch (IOException e) { // 原有 catch 块内的异常处理逻辑 e.printStackTrace(); } finally { // 资源已经完成自动关闭,直接调用方法即可 reportAbc(); }
特殊场景适配
如果你需要 reportAbc() 仅在业务正常执行、资源关闭无异常的场景下调用,不需要在捕获异常的场景执行,可以直接将调用语句放在 try-with-resources 结构之后即可:
try ( FileInputStream fis = new FileInputStream("test.txt"); BufferedInputStream bis = new BufferedInputStream(fis) ) { // 业务逻辑 } catch (IOException e) { // 异常处理,此处抛出异常的话不会执行后续的reportAbc() e.printStackTrace(); throw new RuntimeException(e); } // 无异常抛出才会执行到此处,此时资源已经关闭完成 reportAbc();
内容的提问来源于stack exchange,提问作者bourbon2756
相关产品推荐
相关产品推荐

