讲师中心 微信公众号
AI工具推荐 视频效率加速

在Java里异常处理的执行顺序是怎样的_Java异常流程说明

夏浩酱_4187

夏浩酱_4187

发布时间:2026-01-22 14:19:03

|

1042人浏览过

|

来源于php中文网

原创

Java异常处理执行顺序为:无异常时执行try→finally;有异常时匹配catch→finally;finally几乎总执行,但System.exit、线程强制中断或致命错误时例外;finally中return会覆盖try/catch的返回值。

在java里异常处理的执行顺序是怎样的_java异常流程说明

Java里异常处理的执行顺序由try、catch、finally三者之间的控制流规则决定,不是简单按代码位置从上到下执行——尤其当异常发生、return存在或finally里有return时,行为容易出人意料。

异常未抛出时的执行顺序

没有异常发生,try块正常执行完,跳过所有catch,再执行finally(如果存在),最后继续后续代码。

  • try中无return:按顺序走完try → finally
  • try中有return:先计算return表达式的值(比如return i++会先取当前i值),暂存返回值,然后进入finally;finally执行完,再真正返回
  • finally里不能改变已确定的返回值(基本类型或不可变对象),但能修改可变对象的内容(如StringBuilder)

异常被catch捕获时的流程

异常在try中抛出后,立即中断当前执行,逐个匹配catch块(按声明顺序,且子类优先于父类),匹配成功后执行对应catch块,之后进入finally(无论catch是否含return)。

  • 若catch块末尾有return,同样先暂存返回值,再进finally
  • 若catch中重新抛出异常(throw e),finally仍会执行,然后异常向上冒泡
  • 多个catch只执行一个,匹配后不再检查后面的catch

finally一定会执行吗?什么情况下不走finally

绝大多数情况下finally都会执行,但有三个明确例外:

立即学习“Java免费学习笔记(深入)”;

JavaStoryDevelop
JavaStoryDevelop

你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在

下载
  • JVM直接退出:System.exit(0)在try或catch中调用,finally被跳过
  • 线程被强制中断(如Thread.stop(),已废弃但理论上存在)
  • try或catch中发生了致命错误(如OutOfMemoryError),且JVM选择不执行finally(实际中极少见,不依赖此行为)

注意:return、break、continue、正常结束、异常抛出——这些都不影响finally执行。

finally里写return会覆盖try/catch的返回值

这是最易踩坑的点:finally中的return会直接终结方法,丢弃try或catch中已准备好的返回值。

public static int test() {
    try {
        return 1;
    } catch (Exception e) {
        return 2;
    } finally {
        return 3; // 实际返回3,1和2都被忽略
    }
}

同理,如果finally里抛出异常,也会压制try/catch中的异常或返回逻辑。因此,finally中应避免return和显式throw,仅用于资源清理(如close())。

真正需要关注的是finally对返回值的“劫持”能力,以及它在各种return路径下的介入时机——这些细节在重构或调试资源泄漏、状态不一致问题时,往往就是关键线索。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

2800

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

787

2025.10.24

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

787

2025.10.24

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4258

2023.08.10

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

543

2025.12.01

讯飞绘文AI选题与热点策划合集
讯飞绘文AI选题与热点策划合集

本专题介绍讯飞绘文选题中心与AI选题方法,涵盖热点发现、赛道筛选、选题评估和内容规划,解决创作者找灵感难题。

0

2026.10.22

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

20

2026.10.21

Playwright 页面操作指南
Playwright 页面操作指南

Playwright页面操作专题汇集元素定位、点击与输入、等待响应、多页面切换、Iframe、事件监听及文件处理的已审核文章,便于按操作场景查阅示例与常见问题。

0

2026.10.21

Playwright 入门教程
Playwright 入门教程

Playwright入门专题汇集测试框架安装、VS Code配置、录制脚本、编写首个用例、运行调试及查看报告的已审核文章,帮助初学者搭建端到端测试流程。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn