Java基础面试题08:Java中Exception和Error有什么区别?
在Java中,Exception 和 Error 是异常处理体系的两大核心概念。要理解它们的区别和应用,咱们可以逐步剖析。
Exception和Error的基础区别
-
共同点:
- 两者都继承自
Throwable类,只有Throwable类型的实例才能被throw或catch。
- 两者都继承自
-
区别:
- Exception:程序运行时可能遇到的意料之中的问题,可以也应该进行捕获和处理。例如:文件不存在、用户输入错误。
- Error:极少见的、无法预测的问题,通常是程序无法控制的,比如
OutOfMemoryError(内存溢出)或StackOverflowError(栈溢出)。这些错误通常会导致程序中断。
Exception的两种分类
-
检查异常(Checked Exception)
- 特点:必须显式捕获或抛出(通过
throws声明),否则程序无法通过编译。 - 例子:
IOException、SQLException。 - 适用场景:处理用户输入错误、资源访问失败等。
- 特点:必须显式捕获或抛出(通过
-
运行时异常(Unchecked Exception)
- 特点:可以选择捕获,也可以忽略。编译时不会强制处理。
- 例子:
NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组越界异常)。 - 适用场景:逻辑错误或编程疏忽造成的问题,比如空对象调用方法。
Error详解
- 由JVM生成并抛出:大部分
Error是 JVM 内部错误导致的,和程序代码关系不大。 - 无法处理:
Error通常意味着程序进入非正常状态,几乎无法通过代码恢复。 - 例子:
OutOfMemoryError:JVM内存不足。NoClassDefFoundError:编译时存在的类,在运行时却找不到了。
简单记住:Error 是程序员不需要也不应该处理的系统级问题。
异常处理的关键字详解
Java提供了五个关键字处理异常:try、catch、throw、throws 和 finally。
1. try 和 catch
try:将可能发生异常的代码放在这里。catch:用于捕获并处理异常。例如:
try {int result = 10 / 0; // 可能抛出异常
} catch (ArithmeticException e) {System.out.println("算术异常:" + e.getMessage());
}
2. throw
- 用于显式抛出一个异常。
- 例子:
if (name == null) {throw new NullPointerException("名字不能为空!");
}
3. throws
- 用来声明一个方法可能抛出的异常。
- 例子:
public void readFile(String path) throws IOException {// 可能抛出IOException的代码
}
4. finally
- 无论是否有异常,都会执行。常用于清理资源,如关闭文件流、断开数据库连接等。
- 例子:
try {// 打开文件
} catch (IOException e) {// 捕获异常
} finally {// 确保文件流被关闭
}
常见问题总结
1. 如果 try 中有 return,finally 的代码还会执行吗?
- 答案:会执行,并且是在
return之前执行。
public int test() {try {return 1; // 返回之前先执行 finally} finally {System.out.println("执行finally");}
}
2. 运行时异常和受检异常的区别?
- 运行时异常(Unchecked Exception):
- 常见的程序逻辑错误,如空指针、数组越界。
- 编译器不强制处理,程序员可以选择处理或忽略。
- 受检异常(Checked Exception):
- 与环境相关的问题,如文件不存在、网络断开。
- 必须捕获或声明抛出,否则无法通过编译。
注意事项与最佳实践
-
不要滥用异常:
- 异常是为了处理意料之外的问题,而不是正常的程序控制流。
- 例子:别用异常来判断一个数组是否为空。
-
选择合适的异常类型:
- 可恢复的问题:用
Checked Exception。 - 编程错误:用
RuntimeException。
- 可恢复的问题:用
-
优先使用标准异常类:
- 避免定义太多自定义异常,尽量复用现有的标准异常类。
-
每个方法的异常要写清楚文档:
- 让使用者明确知道方法可能抛出的异常类型。
-
不要忽略捕获的异常:
- 捕获后要处理,或者记录日志,而不是简单地
catch (Exception e) {}。
- 捕获后要处理,或者记录日志,而不是简单地
特别注意:NoClassDefFoundError 和 ClassNotFoundException 的区别
-
NoClassDefFoundError(
Error):- 表示类在编译时存在,但运行时找不到。
- 原因:可能类文件被删除了。
-
ClassNotFoundException(
Exception):- 表示代码尝试动态加载一个类(如
Class.forName())时失败。 - 原因:可能类名写错或类路径不正确。
- 表示代码尝试动态加载一个类(如
希望这份内容能帮你轻松应对面试,理解 Exception 和 Error 的本质区别,写出更加健壮的代码!
最后说一句(求关注,求赞,别白嫖我)
最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的 7701页的BAT大佬写的刷题笔记,让我offer拿到手软
本文,已收录于,我的技术网站 cxykk.com:程序员编程资料站,有大厂完整面经,工作技术,架构师成长之路,等经验分享
求一键三连:点赞、分享、收藏
点赞对我真的非常重要!在线求赞,加个关注我会非常感激!
相关文章:
Java基础面试题08:Java中Exception和Error有什么区别?
在Java中,Exception 和 Error 是异常处理体系的两大核心概念。要理解它们的区别和应用,咱们可以逐步剖析。 Exception和Error的基础区别 共同点: 两者都继承自 Throwable 类,只有 Throwable 类型的实例才能被 throw 或 catch。 区…...
什么是axios?怎么使用axios封装Ajax?
学习目标 什么是axios怎么使用axios封装Ajax该如何使用Axios 封装 XHR 请求 什么是axios Axios 是一个基于 Promise 的 HTTP 客户端,它可以在浏览器和 Node.js 环境中使用。Axios 提供了简单易用的 API,用于执行各种 HTTP 请求操作,如 GET、P…...
Web前端学习_CSS盒子模型
content padding border margin <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS盒子模型</title><style></style> </head> <body> <div class"demo&quo…...
JAVA项目-------医院挂号系统
1,项目目的 1、科室管理:新增科室,删除科室(如果有医生在,则不能删除该科室),修改科室。 2、医生管理:录入医生信息,以及科室信息。修改医生信息(主要是修改…...
[工具分享] 根据Excel数据根据Word文档模板,批量创建生成Word文档并重命名,方便快速查找打印
前几天交楼的小姐姐要多份Word文档合同打印给客户,那么100份就需要修改100次 上面好多都是模板的制式文件,里面的部分数据都是要根据实际值来变动的, 那么有没有快速的方法来操作呢,还是只能一个个手动的改,又容易出…...
Redis的管道操作
在现代应用程序中,Redis作为一种高性能的内存数据库,被广泛用于缓存、消息队列、实时分析等场景。为了进一步提高Redis的性能,Redis提供了管道(Pipeline)操作,允许客户端将多个命令一次性发送到服务器&…...
IT监控 | Oracle云监控全解析
Oracle云(Oracle Cloud)是Oracle公司提供的云服务平台,涵盖了IaaS、PaaS、SaaS和DaaS,支持企业在云中构建、部署、集成和扩展应用,为企业提供了管理服务器、应用程序、存储、网络和数据中心的全面控制能力。 跟踪Oracle云基础设施的关键组件将…...
前端面试题-1(详解事件循环)
1.了解浏览器的进程模型 1.什么是进程? 程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 2.什么是线程?…...
Redis(5):哨兵
一、作用和架构 1. 作用 在介绍哨兵之前,首先从宏观角度回顾一下Redis实现高可用相关的技术。它们包括:持久化、复制、哨兵和集群,其主要作用和解决的问题是: 1)持久化:持久化是最简单的高可用方法(有时甚…...
【人工智能】Transformers之Pipeline(二十五):图片特征抽取(image-feature-extraction)
目录 一、引言 二、图片特征抽取(image-feature-extraction) 2.1 概述 2.2 google/ViT 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模型排名 三、总结 一、引言 pi…...
podman 源码 5.3.1编译
1. 构建环境 在麒麟V10服务器操作系统上构建:Kylin-Server-V10-GFB-Release-2204-Build03-ARM64.iso。由于只是编译 podman 源码,没必要特地在物理机或服务上安装一个这样的操作系统,故采用在虚拟机里验证。 2. 安装依赖 参考资料…...
矩阵重新排列——rot90函数
通过 r o t 90 rot90 rot90函数可以将矩阵进行旋转 用法: r o t 90 ( a , k ) rot90(a,k) rot90(a,k)将矩阵 a a a按逆时针方向旋转 k 9 0 ∘ k\times90^\circ k90∘...
Leetcode 51 N Queens Leetcode N Queens II
题意 给定一个数字 n n n,形成n*n的棋盘,棋盘上放n个皇后,确保皇后之间不会相互吃(皇后可以直线吃,斜线吃) 链接 https://leetcode.com/problems/n-queens/description/ 思考 这道题只能暴力枚举所有的…...
0.查找命令
目录 🍉 find - 查找文件 🍇 grep 🍓 which 🍈locate 总结: 🍉 find - 查找文件 # 语法 # find [搜索范围] [选项] # 选项 # -name<查询方式> 按照指定的文件名查找模式查找文件 # …...
HarmonyOS-初级(一)
文章目录 初级核心技术理念函数的声明和使用类的声明和使用接口声明和使用声明式UI的特征 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年11月28日12点50分 初级 HAP可以分为静…...
Oracle 11gR2 坏块修复实例一则
背景 前段时间在 Oracle 11gR2 数据库中发现了坏块问题。环境是 64 位 Linux 平台。本文将详细介绍如何使用 DBMS_REPAIR 进行在线修复,当然也可以基于备份和 RMAN 的修复方法这里暂时不做介绍。 发现坏块 1. 从 alert.log 中发现错误 在 alert.log 文件中发现了…...
解决FinalShell 连接virtual box安装的Linux centos/7系统 一直让输入密码,输入什么密码都没用
问题描述: virtual box安装的Linux centos/7系统默认只允许ssh登录方式,需要配置允许账号密码登录 先登录root账号(一定要是root):初始密码为vagrant su 修改ssh配置文件: vi /etc/ssh/sshd_config 修改…...
华为E9000刀箱(HWE9000V2)服务器硬件监控指标解读
随着数据中心规模的不断扩大,服务器的稳定性和可靠性变得尤为重要。华为E9000刀箱(HWE9000V2)作为一款高性能的服务器设备,其硬件状态的实时监控对于保障业务的连续性和系统的稳定运行至关重要。 监控易作为一款专业的IT基础设施监…...
Python基础学习-12匿名函数lambda和map、filter
目录 1、匿名函数: lambda 2、Lambda的参数类型 3、map、 filter 4、本节总结 1、匿名函数: lambda 1)语法: lambda arg1, arg2, …, argN : expression using arg 2) lambda是一个表达式,而不是一个语…...
民安:助力提升城市安全水平
随着城市化进程的加速,平安城市的创建成为了社会治理的重要议题。为了解公众对平安城市创建的看法和评价,为提升城市安全水平提供参考,近期某市委托民安智库专业市场调查公司开展了一次安全感满意度调查。 本次调查围绕公共安全、个人安全、…...
红蓝对抗深度解析:从技术体系到落地实践,企业安全真正的实战课
红蓝对抗深度解析:从技术体系到落地实践,企业安全真正的实战课 在数字化攻防进入 “实战对抗” 时代的今天,红蓝对抗已成为企业检验安全防御体系、提升应急响应能力的核心手段。不同于传统的漏洞扫描和合规检查,红蓝对抗以 “高仿…...
别再折腾LangChain了!用Ollama + DeepSeek R1在WSL2上5分钟搞定本地知识库问答
5分钟极简方案:用OllamaDeepSeek R1在WSL2搭建高效本地知识库 当开发者首次接触本地知识库系统时,往往会被LangChain等框架的复杂性劝退。本文将介绍一种绕过传统复杂流程的极简方案,只需5分钟即可在Windows 11的WSL2环境中搭建可用的问答系统…...
别再手动写JSON Schema了!用智谱AI/DeepSeek的FunctionCall,5分钟搞定天气查询API对接
告别JSON Schema手写时代:用大模型FunctionCall极速对接天气API 开发聊天机器人时,最头疼的莫过于为每个新功能手动编写JSON Schema。上周我接手一个天气查询功能需求,原本预计要花半天时间定义参数结构、验证逻辑,结果用智谱AI的…...
iOS激活锁终极绕过:3步解锁Apple设备完整指南
iOS激活锁终极绕过:3步解锁Apple设备完整指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否曾经遇到过这样的情况:购买了一台二手iPhone,却发现它被原主人的…...
MIL图像库实战:从采集卡配置到Qt应用开发
1. 工业视觉项目开发全流程解析 第一次接触MIL图像库时,我被它强大的硬件抽象能力震撼到了。这个由Matrox开发的图像处理库,就像一位经验丰富的翻译官,把不同品牌采集卡的硬件差异统统屏蔽掉。想象一下,你手里有Basler、AVT、Dals…...
DLSS Swapper实战指南:高效管理DLSS版本3步达成游戏性能跃升
DLSS Swapper实战指南:高效管理DLSS版本3步达成游戏性能跃升 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 当你在4K分辨率下启动《赛博朋克2077》,满心期待沉浸在夜之城的霓虹中时,…...
用STM32F4做个PWM信号发生器:按键调参+OLED显示,示波器实测验证
用STM32F4打造高精度PWM信号发生器:从原理到实战 在电子开发与测试中,PWM信号发生器是不可或缺的工具。专业信号源价格昂贵,而基于STM32F4的开发板却能以极低成本实现类似功能。本文将带你从零构建一个带OLED显示和按键控制的PWM信号发生器&…...
从零开始掌握drawio:免费开源绘图工具的全方位指南
1. 为什么你需要drawio这款绘图神器 第一次接触drawio是在三年前的一个项目会议上,当时团队需要快速绘制一套系统架构图。同事随手打开浏览器输入app.diagrams.net,五分钟内就搭建出了清晰的流程图框架。那一刻我才发现,原来专业绘图可以如此…...
AI专著写作工具深度剖析,从构思到完稿全程高效助力
创新是学术专著的核心所在,也是写作过程中的一大挑战。一本优秀的专著不仅应当仅仅是以往研究成果的简单集合,而是要提出贯穿整本书的全新观点、理论框架或研究方法。在庞大的学术文献中,发现未被充分研究的空白并不容易——有时是因为选题被…...
Nginx多服务静态资源路径冲突解决方案
在Nginx反向代理多个Flask服务时,不同服务的静态资源路径会发生冲突,导致服务A的页面加载了服务B的CSS/JS文件,或者找不到静态资源返回404错误。 问题场景 部署架构 域名: mathcoding.top ├── 主服务 (端口5000) → 路径前缀: / └──…...
