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

在Java中异常是否会中断程序_Java程序执行流程解析

浅萱君_6758

浅萱君_6758

发布时间:2026-01-21 17:03:09

|

206人浏览过

|

来源于php中文网

原创

Java中异常是否中断程序取决于类型和处理方式:未捕获的运行时异常(如NullPointerException)立即终止当前线程执行;检查型异常(如IOException)必须显式处理,否则编译失败,若最终未捕获也会中断执行;finally块几乎总执行但不能阻止异常传播。

在java中异常是否会中断程序_java程序执行流程解析

Java中异常是否中断程序,取决于异常类型和是否被处理:未捕获的 RuntimeException 及其子类(如 NullPointerException、ArrayIndexOutOfBoundsException)会中断当前线程的执行流程;而 Exception 的检查型子类(如 IOException)必须显式处理(try-catch 或 throws),否则编译不通过——但一旦抛出且未被捕获,同样中断执行。

运行时异常(unchecked)直接终止当前方法调用栈

这类异常继承自 RuntimeException,JVM 不强制要求处理。一旦抛出,会立即停止当前方法剩余语句的执行,并向上层调用栈回溯,直到遇到匹配的 catch 块或线程终止。

  • 常见表现:控制台打印堆栈,程序输出戛然而止(除非在 main 外有全局异常处理器)
  • System.out.println("A"); throw new NullPointerException(); System.out.println("B"); —— "B" 永远不会输出
  • 即使在循环中,单次迭代抛出未捕获的 RuntimeException,也会跳出该次迭代并终止整个循环后续执行(除非 try-catch 包裹在循环体内)

检查型异常(checked)必须显式声明或捕获,否则编译失败

像 IOException、SQLException 这类异常,编译器会强制你面对它们。它们本身不“自动中断”程序,但如果你选择 throws 而不处理,最终仍可能在调用链顶端因未捕获而中断;若用 try-catch 捕获,则程序可继续执行。

  • 没写 try-catch 也没加 throws → 编译报错:Unhandled exception type XXXException
  • 写了 throws IOException 但调用方也不处理 → 异常最终传播到 main,导致线程终止
  • 在 catch 块里只打印日志、不重新抛出 → 当前方法可正常返回,后续逻辑继续

finally 块几乎总能执行,但不是“万能兜底”

finally 块的设计目标是确保清理逻辑(如关闭文件、释放锁)被执行,但它不能阻止异常传播,也不能在所有情况下运行。

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

  • 正常情况:无论 try 中是否抛异常、是否被 catch,finally 都会执行(在 catch 后、方法返回前)
  • 例外情况:System.exit() 直接终止 JVM;try 或 catch 中发生 ThreadDeath(已废弃);JVM 崩溃或断电
  • 注意:finally 中如果也抛异常,会覆盖 try 中的异常(除非使用 try-with-resources 或显式抑制)
public static void example() {
    try {
        throw new RuntimeException("from try");
    } catch (RuntimeException e) {
        System.out.println("caught: " + e.getMessage());
        throw new RuntimeException("from catch"); // 新异常将传播出去
    } finally {
        System.out.println("finally runs"); // 这行会输出
        // 如果这里 throw 新异常,它会成为最终抛出的异常
    }
}

真正容易被忽略的是:异常中断的是「当前线程」的执行流,不是整个 JVM。多线程环境下,一个线程崩溃默认不会杀死其他线程(除非共享状态被破坏或使用了 UncaughtExceptionHandler 主动干预)。另外,return 和异常同时存在时的执行顺序(比如 try 里有 return,finally 里也有 return)会导致实际返回值被覆盖——这种细节在真实业务逻辑中极易引发隐蔽 bug。

热门AI工具

更多
小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

豆包大模型

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

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

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

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

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

PixTV
PixTV Hot

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

切问学术

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

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6127

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2588

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6127

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2588

2023.08.10

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

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

4378

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

1209

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

423

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

559

2026.01.21

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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