面试官:介绍一下 Java 异常!99% 的人都答不全(附异常体系图)
很多 Java 初学者刚接触异常时都会有这样的疑问什么是异常Exception为什么 Java 要设计异常机制Error 和 Exception 有什么区别Checked Exception 和 RuntimeException 又是什么try、catch、finally、throw、throws 到底有什么区别本文将用最通俗的方式把 Java 异常一次讲明白。一、什么是 Java 异常一句话概括Java 异常Exception是程序运行过程中发生的错误或异常情况Java 通过异常机制来发现、传递和处理这些错误避免程序直接崩溃。例如inta10;intb0;System.out.println(a/b);运行结果Exception in thread main java.lang.ArithmeticException: / by zero因为除数不能为 0所以 JVM 抛出了一个ArithmeticException算术异常。二、为什么要有异常假设 Java 没有异常机制。程序运行程序运行 ↓ 出现错误 ↓ 程序直接退出这样用户只能看到程序崩溃。而 Java 引入异常后程序运行 ↓ 发生错误 ↓ 抛出异常 ↓ 程序捕获异常 ↓ 处理错误 ↓ 程序继续运行例如try{intresult10/0;}catch(Exceptione){System.out.println(出现异常e.getMessage());}System.out.println(程序继续执行);输出出现异常/ by zero 程序继续执行可以看到虽然发生了错误但程序并没有直接崩溃而是继续执行后面的代码。因此异常机制的目的就是让程序能够优雅地处理错误提高程序的健壮性。三、Java 异常体系Java 中所有异常最终都继承自Throwable。整个继承关系如下Throwable / \ Error Exception | ---------------------------- | | Checked Exception RuntimeException 编译时异常 运行时异常可以看到Java 的异常主要分为两大类Error错误Exception异常其中 Exception 又分为Checked Exception编译时异常RuntimeException运行时异常下面分别介绍。四、Error错误Error 表示JVM 自身发生了严重错误。例如OutOfMemoryError StackOverflowError举个例子publicclassTest{publicstaticvoidtest(){test();}publicstaticvoidmain(String[]args){test();}}由于方法无限递归调用最终会出现StackOverflowErrorError 的特点JVM 层面的严重错误一般程序员无法恢复通常不建议使用 try-catch 捕获一句话记忆Error 是 JVM 的严重错误一般不用程序去处理。五、Exception异常Exception 表示程序运行过程中可能发生的问题。例如文件不存在数据库连接失败空指针数组越界Exception 又分为两类。1、Checked Exception编译时异常编译器要求必须处理。例如FileInputStreamfisnewFileInputStream(a.txt);编译器直接报错Unhandled exception必须使用try{FileInputStreamfisnewFileInputStream(a.txt);}catch(FileNotFoundExceptione){}或者publicvoidread()throwsFileNotFoundException{}常见编译时异常IOException SQLException ClassNotFoundException一句话编译时异常必须处理否则代码无法通过编译。2、RuntimeException运行时异常运行时异常编译器不会强制要求处理。例如数组越界int[]arr{1,2};System.out.println(arr[5]);运行结果ArrayIndexOutOfBoundsException再例如空指针Stringstrnull;System.out.println(str.length());运行NullPointerException编译器不会报错。因为这些异常通常是程序员编写代码时的逻辑错误。开发中最常见的 RuntimeException 有NullPointerException ArithmeticException ArrayIndexOutOfBoundsException ClassCastException NumberFormatException一句话运行时异常一般由程序逻辑错误导致编译器不强制处理。六、Error 和 Exception 的区别ErrorExceptionJVM 严重错误程序运行异常一般无法恢复可以处理不建议捕获可以捕获例如 OOM例如空指针记住一句话Error 是 JVM 的问题Exception 是程序的问题。七、Java 如何处理异常Java 提供了五个关键字try catch finally throw throws下面分别介绍。1、try放可能发生异常的代码。try{}2、catch捕获异常。例如try{inta10/0;}catch(ArithmeticExceptione){System.out.println(除数不能为0);}程序不会崩溃而是进入catch。3、finally无论是否发生异常都会执行。try{}finally{}通常用于关闭数据库连接关闭文件释放资源例如try{}finally{connection.close();}4、throw主动抛出一个异常对象。例如if(age0){thrownewIllegalArgumentException(年龄不能小于0);}这里不是 JVM 自动抛异常而是程序员主动抛。5、throws声明方法可能抛出的异常。例如publicvoidreadFile()throwsIOException{}表示我这个方法可能会抛出 IOException调用者需要处理。八、throw 和 throws 的区别高频面试很多初学者容易混淆。其实很好记throwthrows主动抛异常声明异常写在方法内部写在方法声明后后面跟异常对象后面跟异常类型例如thrownewRuntimeException();表示主动抛出一个异常对象。而publicvoidtest()throwsIOException{}表示告诉调用者这个方法可能抛 IOException。一句话throw 是抛throws 是声明。九、最常见的运行时异常开发中最容易遇到的就是下面几个。1、NullPointerException空指针Stringstrnull;str.length();2、ArithmeticException算术异常10/0;3、ArrayIndexOutOfBoundsException数组越界arr[100];4、ClassCastException类型转换异常AnimalanimalnewAnimal();Dogdog(Dog)animal;5、NumberFormatException数字格式异常Integer.parseInt(abc);十、异常是如何传播的假设方法调用关系如下main() ↓ A() ↓ B() ↓ C()如果C()发生异常C 不处理 ↓ 抛给 B ↓ B 不处理 ↓ 抛给 A ↓ A 不处理 ↓ 抛给 main ↓ main 不处理 ↓ JVM ↓ 程序结束这就是异常传播机制。一句话异常会沿着方法调用栈一级一级向上传递直到被处理否则最终交给 JVM。十一、面试如何回答如果面试官问介绍一下 Java 异常。可以这样回答Java 的异常是程序运行过程中出现的异常情况所有异常都继承自Throwable。Throwable分为Error和Exception其中Error表示 JVM 严重错误一般不处理Exception表示程序异常又分为编译时异常和运行时异常。编译时异常必须处理运行时异常通常由程序逻辑错误导致不强制处理。Java 提供try-catch-finally、throw、throws等机制来捕获、抛出和传递异常。这是一个比较完整且面试官认可度较高的回答。十二、总结最后用一张图总结整个异常体系。Throwable / \ Error Exception | ---------------------------- | | Checked Exception RuntimeException 必须处理 可不处理 处理方式 try catch finally throw throws记住下面四句话即可Throwable 是所有异常和错误的父类。Error 是 JVM 的严重错误一般不处理。Exception 是程序异常分为编译时异常和运行时异常。Java 通过 try-catch、throw、throws 等机制实现异常的捕获、传递和处理。一句话总结Java 异常本质上是一套错误处理机制它将程序运行过程中发生的问题封装成异常对象通过抛出、传递和捕获异常让程序能够更加稳定、健壮地运行。

相关新闻

如何在43秒内解锁星露谷物语所有XNB资源:StardewXnbHack完全指南

如何在43秒内解锁星露谷物语所有XNB资源:StardewXnbHack完全指南

如何在43秒内解锁星露谷物语所有XNB资源:StardewXnbHack完全指南 【免费下载链接】StardewXnbHack A simple one-way XNB unpacker for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/st/StardewXnbHack 想要定制你的星露谷物语游戏体验吗&…

2026/7/14 12:55:02阅读更多 →
3分钟学会无损视频剪辑:LosslessCut 终极使用指南

3分钟学会无损视频剪辑:LosslessCut 终极使用指南

3分钟学会无损视频剪辑:LosslessCut 终极使用指南 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 想要快速剪辑视频却担心画质损失?今天我要介…

2026/7/14 12:55:02阅读更多 →
ETS2LA:3分钟掌握《欧洲卡车模拟2》智能驾驶辅助系统

ETS2LA:3分钟掌握《欧洲卡车模拟2》智能驾驶辅助系统

ETS2LA:3分钟掌握《欧洲卡车模拟2》智能驾驶辅助系统 【免费下载链接】ETS2LA Plugin based interface program for ETS2/ATS. 项目地址: https://gitcode.com/gh_mirrors/eur/ETS2LA 你是否厌倦了长途驾驶的疲惫,又不想错过《欧洲卡车模拟2》的美…

2026/7/14 12:55:02阅读更多 →
147、超分模型中的残差学习:从SRResNet到RCAN的演进

147、超分模型中的残差学习:从SRResNet到RCAN的演进

147、超分模型中的残差学习:从SRResNet到RCAN的演进 去年帮一个医疗影像项目做超分,客户要求把病理切片放大4倍,同时保留细胞核的纹理细节。我兴冲冲地上了个SRResNet,结果跑出来的结果——边缘倒是锐利了,但细胞核内部出现了奇怪的棋盘格伪影,像被砂纸打磨过一样。调试了…

2026/7/14 14:10:10阅读更多 →
148、超分模型中的频域分析:高频细节恢复与低频保持

148、超分模型中的频域分析:高频细节恢复与低频保持

148、超分模型中的频域分析:高频细节恢复与低频保持 去年调一个EDSR的复现,在DIV2K上训练了三天,PSNR涨了0.02dB,但肉眼一看,纹理糊成一片,边缘锯齿感强得离谱。当时我盯着loss曲线,心想这模型到底在学什么?后来把特征图做FFT可视化,才明白问题出在哪——模型把精力全…

2026/7/14 14:10:10阅读更多 →
Processing.py入门指南:用Python开启创意编程之旅

Processing.py入门指南:用Python开启创意编程之旅

Processing.py入门指南:用Python开启创意编程之旅 【免费下载链接】processing.py Write Processing sketches in Python 项目地址: https://gitcode.com/gh_mirrors/pr/processing.py Processing.py是一个让开发者能够使用Python语言编写Processing图形程序…

2026/7/14 14:10:10阅读更多 →
10个必知的HTTP安全头:用shcheck验证你的网站防护

10个必知的HTTP安全头:用shcheck验证你的网站防护

10个必知的HTTP安全头:用shcheck验证你的网站防护 【免费下载链接】shcheck A basic tool to check security headers of a website 项目地址: https://gitcode.com/gh_mirrors/sh/shcheck 在当今网络安全环境中,HTTP安全头是保护网站免受常见攻击…

2026/7/14 14:10:10阅读更多 →
构建智能AI助手生态:Skills CLI如何重塑开发者与AI代理的协作方式

构建智能AI助手生态:Skills CLI如何重塑开发者与AI代理的协作方式

构建智能AI助手生态:Skills CLI如何重塑开发者与AI代理的协作方式 【免费下载链接】skills The open agent skills tool - npx skills 项目地址: https://gitcode.com/GitHub_Trending/ad/skills 在人工智能技术快速发展的今天,AI编码助手已成为开…

2026/7/14 14:10:10阅读更多 →
2026年,Superpowers 可能不再是 Claude/Codex/Workbuddy 的最佳方案了(附实操建议)

2026年,Superpowers 可能不再是 Claude/Codex/Workbuddy 的最佳方案了(附实操建议)

Superpowers 的问题越来越大了。从 Superpowers 发布到现在,我一直是它的忠实用户。相信使用 Claude、Codex 或者 Workbuddy 的你,它都是「先装为敬」的 Skill。但最近我体感越来越差了,问题出在它的思考强度太大,一次问题的处理&…

2026/7/14 14:05:09阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/14 4:56:14阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/14 2:55:05阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/14 6:17:41阅读更多 →
【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

更多请点击: https://intelliparadigm.com 第一章:Cursor数据库安全红线概览 Cursor 作为一款基于 AI 的智能编程助手,其本地数据库(SQLite 存储)承载着用户代码片段、会话历史、自定义规则及敏感上下文信息。理解其安…

2026/7/14 0:03:18阅读更多 →
【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

更多请点击: https://codechina.net 第一章:Notion AI写作辅助的底层能力边界认知 Notion AI 并非通用大语言模型的直接封装,而是基于 Llama 系列与自研微调模型构建的轻量化推理服务,其输入上下文窗口严格限制在 8192 token&…

2026/7/14 0:03:18阅读更多 →
AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

更多请点击: https://kaifayun.com 第一章:AI Agent数据越界行为的合规性挑战与溯源必要性 AI Agent在自主执行任务过程中,可能因提示注入、上下文污染或权限配置缺陷,无意或有意访问、缓存、传输受保护数据(如PII、G…

2026/7/14 0:03:18阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/13 4:21:17阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/14 4:45:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/14 2:42:17阅读更多 →