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

在Java里受检异常和运行时异常如何区分_Java异常分类解析

冬伟酱_2464

冬伟酱_2464

发布时间:2026-02-04 12:11:04

|

697人浏览过

|

来源于php中文网

原创

受检异常必须显式处理,否则编译不通过;运行时异常继承自RuntimeException,编译器不检查;Error代表JVM严重问题,一般不捕获。

在java里受检异常和运行时异常如何区分_java异常分类解析

受检异常必须显式处理,否则编译不通过

Java 编译器强制要求你对 Exception 及其子类(但排除 RuntimeException)做出响应:要么用 try-catch 捕获,要么在方法签名中用 throws 声明。这是编译期检查,和运行行为无关。

常见受检异常包括:IOException、SQLException、ClassNotFoundException。它们代表外部可预期的失败场景,比如文件不存在、网络中断、数据库连接失败。

  • 不写 try-catch 也不加 throws → 编译报错:Unhandled exception type XXX
  • 即使你知道它“实际不会发生”,也得处理 —— 比如 new String(byteArr, "UTF-8") 抛出 UnsupportedEncodingException,但 "UTF-8" 是 JDK 强制支持的编码,此时仍需包裹或声明
  • 过度使用受检异常会导致调用链上层层 throws,污染 API 设计;合理做法是封装后转为运行时异常(如 Spring 的 DataAccessException)

运行时异常继承自 RuntimeException,编译器不管

RuntimeException 及其所有子类(如 NullPointerException、ArrayIndexOutOfBoundsException、IllegalArgumentException)属于运行时异常。它们代表程序逻辑错误,本应由开发者提前避免,而非靠调用方兜底。

这类异常发生时,JVM 直接中断当前执行流,向上抛出直到被捕获或终止线程。你完全可以选择不捕获 —— 大多数时候这是推荐做法。

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

Java Maven Common
Java Maven Common

Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。

下载
  • 捕获 NullPointerException 通常掩盖了空值来源问题,应优先修复判空逻辑
  • IllegalArgumentException 常用于构造函数或 setter 中校验参数,抛出即表明调用方传入非法值,不该被静默吞掉
  • 自定义运行时异常建议继承 RuntimeException,不要加 throws 声明,保持调用轻量

Throwable 是根,Error 一般不捕获

所有异常都继承自 Throwable,它有两个直接子类:Exception 和 Error。后者代表 JVM 层严重问题,比如 OutOfMemoryError、StackOverflowError、NoClassDefFoundError。

这些不是程序能“恢复”的状态,捕获它们往往无效,甚至干扰 JVM 的错误处理机制。

  • 不要写 catch (Error e) 或 catch (Throwable t) 来兜底 —— 除非你在写监控代理或容器框架
  • NoClassDefFoundError 不等于 ClassNotFoundException:前者是类已加载过、再次解析失败(如静态块抛异常),后者是首次加载就找不到字节码
  • 某些框架(如 Spring)会把部分 Error 包装成 RuntimeException 再抛出,便于统一处理,但这属于设计选择,不是语言规则

如何快速判断一个异常是受检还是运行时?

看它的直接父类是不是 RuntimeException 或 Error。如果是,就是运行时异常或错误;否则,只要它是 Exception 的子类,就是受检异常(Exception 本身也是受检的)。

IDE 里按住 Ctrl 点进去看继承链最准。别依赖名字:比如 NumberFormatException 听起来像 IO 错误,但它继承自 IllegalArgumentException,所以是运行时异常。

  • InterruptedException 是受检异常,但常出现在循环中,需配合 Thread.interrupted() 清除中断状态,否则可能丢失信号
  • CloneNotSupportedException 是受检异常,但 Object.clone() 已被标记为 @Deprecated,现代代码更倾向用构造函数或 builder 复制对象
  • 第三方库若抛出未声明的受检异常(比如某 SDK 方法文档说抛 Exception),实际可能是包装过的运行时异常,这时要以运行时方式对待
真正容易出问题的地方,是把本该早发现的逻辑错误(比如空指针)藏在受检异常的 try-catch 里,或者反过来,对本应声明的资源操作异常(比如关闭流)放任不管。区分的关键不在记忆分类,而在理解“这个异常是我该预防的,还是调用方该应对的”。

热门AI工具

更多
豆包大模型

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

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

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

讯飞绘文

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

Atoms
Atoms Hot

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

UP简历
UP简历 Hot

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

DeepSeek

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

UpDream
UpDream Hot

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

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2611

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

477

2026.01.26

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6459

2023.08.02

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

989

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2980

2023.10.25

C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

359

2026.04.23

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

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

4258

2023.08.10

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

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

543

2025.12.01

剧云故事大纲与分场规划教程
剧云故事大纲与分场规划教程

本专题讲解剧云梗概与多级大纲功能,覆盖全局、分集、分场结构生成,以及主线冲突、剧情节点和场次顺序调整。

0

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