文章目录

  • 187. Java 异常 - 什么是异常?
    • 🚨 什么是“异常”?
      • ✅ 定义:
    • 🧱 异常对象中包含什么?
    • Java 是怎么“处理”异常的?
    • 🧯 什么是异常处理器(Exception Handler)?
    • 🧭 示例:调用栈中的异常传递过程
    • ☠️ 如果没人处理异常会怎样?
    • 💡 为什么使用异常比传统错误码更好?
    • 🔍 常见异常类型
    • 🧾 小结
    • 🎯 建议实践

187. Java 异常 - 什么是异常?


🚨 什么是“异常”?

在程序运行过程中,有些情况是“非正常的” —— 比如文件找不到、除数为零、数组越界……这些突发事件打断了程序原本的运行流程,这就是 异常(Exception)

✅ 定义:

异常是程序运行时发生的、打断正常执行流程的一种事件。

当异常发生时:

  1. 当前方法会 创建一个异常对象,这个对象封装了错误信息;
  2. 然后将这个对象 抛给 Java 运行时系统
  3. 运行时系统会寻找可以“处理”这个异常的代码块。

这个过程被称为:抛出异常(throwing an exception)


🧱 异常对象中包含什么?

异常对象中通常包含以下信息:

  • 异常的类型(如 NullPointerExceptionIOException 等)
  • 错误发生时的程序状态(栈轨迹、具体位置等)
  • 可选的错误消息(message

Java 是怎么“处理”异常的?

关键概念:调用栈(Call Stack)

可以想象程序运行是一个“方法接着方法调用”的过程。发生异常时,Java 会沿着调用栈往上“寻找处理者” 👇

main()methodA()methodB()methodC() ← 异常发生在这里

Java 会从 methodC 开始,逐层往上查找,寻找能处理此异常的方法。


🧯 什么是异常处理器(Exception Handler)?

异常处理器是一段能够“捕获并处理”异常的代码块。通常使用 try-catch 语句编写:

try {// 可能出错的代码int result = 10 / 0;
} catch (ArithmeticException e) {// 处理异常的代码System.out.println("算术异常:除数不能为0!");
}

如果某个方法能处理该异常类型,它就 “捕获(catch)” 了这个异常,程序可以继续运行。


🧭 示例:调用栈中的异常传递过程

public class Demo {public static void main(String[] args) {methodA();}public static void methodA() {methodB();}public static void methodB() {methodC();}public static void methodC() {int result = 10 / 0; // ArithmeticException}
}

此代码运行时会报错:

Exception in thread "main" java.lang.ArithmeticException: / by zeroat Demo.methodC(Demo.java:14)at Demo.methodB(Demo.java:10)at Demo.methodA(Demo.java:6)at Demo.main(Demo.java:2)

Java 沿着调用栈找,但没有任何一个方法提供处理器,所以程序崩溃。


☠️ 如果没人处理异常会怎样?

如果异常从最底层冒到最顶层(main 方法),仍无人处理:

  • 当前线程终止
  • 如果是主线程 → 整个程序崩溃

💡 为什么使用异常比传统错误码更好?

传统方式(C 风格):

int status = doSomething();
if (status == -1) {// 错误处理逻辑
}

Java 异常的优势在于:

特点好处
❌ 非常规返回值✔ 不影响主逻辑的返回
❌ 忽略容易✔ 统一强制检查
❌ 错误信息不集中✔ 异常对象封装信息
❌ 嵌套判断混乱✔ try-catch 语义清晰

🔍 常见异常类型

异常类型说明
NullPointerException访问 null 引用的方法或字段
ArrayIndexOutOfBoundsException数组越界
ArithmeticException除以零等算术错误
IOExceptionI/O 操作失败
ClassNotFoundException类未找到

🧾 小结

  • 异常是运行时的问题,用对象表示,用抛出(throw)来传播。
  • Java 使用调用栈寻找可以处理异常的代码块。
  • try-catch 是处理异常的标准方式。
  • 异常使得错误处理逻辑与业务逻辑解耦,提升了代码清晰度。

🎯 建议实践

✅ 编写以下代码练习理解异常处理:

public class TestException {public static void main(String[] args) {try {int[] arr = {1, 2, 3};System.out.println(arr[3]); // 越界} catch (ArrayIndexOutOfBoundsException e) {System.out.println("数组越界了!");e.printStackTrace(); // 查看异常轨迹}System.out.println("程序继续执行...");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/96445.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/96445.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/96445.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D Tiles 工具

概述 3D Tiles 工具是一组用于转换、优化、处理和分析 3D Tiles 数据的工具和实用程序。 安装 要在本地目录中安装 3D Tiles 工具,请运行以下命令: npm install 3d-tiles-tools如果想直接使用 Git 仓库的克隆版本,请参阅开发者设置。 命…

【编号520】全国4500多个地震灾害点位数据(2021.2-2025.8)

今天小编整理分享的是 全国4500多个地震灾害点位数据(2021.2-2025.8)。概况数据概况全国4500多个地震灾害点位数据(2021.2-2025.8)地质灾害点位数据-地震!数据含发生时间、地点、经纬坐标、灾害规模等。数据为shp格式和excel表格…

DriftingBlues: 4靶场渗透

DriftingBlues: 4 来自 <https://www.vulnhub.com/entry/driftingblues-4,661/> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.128&#xff0c;靶场IP192.168.23…

GEO 优化专家孟庆涛以 AI 技术建体系,赋能多行业智能化转型

在生成式 AI 重塑全球搜索生态的浪潮中&#xff0c;中国 GEO&#xff08;生成式引擎优化&#xff09;领域的开拓者孟庆涛以 "智能决策革命" 的技术框架&#xff0c;颠覆了传统 "发发文章" 的简单认知。作为辽宁粤穗网络科技有限公司总经理兼 GEO 实验室主任…

架构很简单:从架构的角度学习源码

缘起最近出差比较多&#xff0c;在路上思考&#xff1a;如何学习源码&#xff1f;是的&#xff0c;面试官问你看了哪些源码&#xff1f;讲一讲&#xff1f;更高级的&#xff1a;说一下&#xfeff;Netty黏包拆包怎么实现的&#xff1f;或者再问的偏一点&#xff1f;讲一下某个功…

R的安装与使用

工作与学习需要&#xff0c;对R需要有一定的熟悉&#xff0c;特此记录 目录R的安装与使用R的安装R的安装与使用 R的安装 1.找到R的官网&#xff0c;百度直接搜索&#xff0c;或者www.bing.com国际版搜索即可&#xff0c;下载R与Rstudio&#xff0c;Rstudio是R的开发集成工具 …

界面规范10-树

字体字号和其他地方一致&#xff1a;.el-tree-node__label{font-size: $defaultTxtSize;font-family: $defaultFontFamily;}选中效果&#xff1a;.el-tree-node.is-current>.el-tree-node__content {background-color: #ffffff !important;color: #0000ff !important;font-w…

Win 11 ARM 版搭建ESP-IDF环境问题记录

整理我在ARM版 WIN 11 上配置ESP-IDF 环境的记录 WIN 11环境下搭建ESP-IDF 命令环境&#xff0c;有几种办法&#xff1a; 下载ESP-IDF 安装程序 从https://dl.espressif.com/dl/esp-idf/ 下载安装程序&#xff0c;下载的程序只能在AMD64位CPU上&#xff0c;不能在ARM 芯片上使用…

FreeBSD系统使用freebsd-update命令从14.2升级到14.3

FreeBSD系统使用freebsd-update命令从14.2升级到14.3 升级操作 先升级小版本命令 # 检查系统漏洞补丁 sudo freebsd-update fetch sudo freebsd-update install再升级到14.3 sudo freebsd-update upgrade -r 14.3-RELEASE 速度很慢啊 执行install # freebsd-update inst…

一键拖动去除文件夹及文件名称的空格

经常会碰见文件夹&#xff0c;以及其中文件命名有空格的情况&#xff1a;这些空格对有些代码程序不友好&#xff0c;做了一个一键拖动去除文件名称空格 只用把文件夹或者多个文件拖动到bat代码上就可以一键搞定 分为两个文件&#xff0c;需要放在一个目录下&#xff1a; replac…

Roo Code:用自然语言编程的VS Code扩展

在编程的世界里&#xff0c;常常需要记忆各种复杂的命令和语法&#xff0c;与机器进行“对话”。但 如果使用Roo Code&#xff0c;就可以让编程交流变得像日常对话一样简单自然。用自然语言“打字”交流 Roo Code的核心设计理念是理解自然语言。这意味着&#xff0c;无需掌握任…

window显示驱动开发—视频呈现网络简介

视频呈现网络 (VidPN) 管理器是 DirectX 图形内核子系统 (Dxgkrnl.sys) 的组件&#xff0c;负责管理连接到显示适配器的监视器和其他显示设备的集合。 VidPN 经理的职责包括&#xff1a;响应热插拔和拔下监视器。当连接的监视器集更改时&#xff0c;维护和更新一组可用的显示模…

安卓13_ROM修改定制化-----打开摄像头调用相机功能 实现无人直播

无人直播功能的实现而修改手机固件,让打开摄像头时默认启动相机功能,需要理解安卓系统中摄像头调用的流程 ,而相机应用是通过绑定该服务实现功能的。 通过博文了解💝💝💝 1💝💝💝-----了解修改无人直播功能实现的核心原理 2💝💝💝-----修改rom 实现更改…

系统架构设计师——【2024年上半年案例题】真题模拟与解析(二)

系统架构设计师——【2024年上半年案例题】真题模拟与解析&#xff08;二&#xff09;试题三&#xff1a;微服务架构与缓存策略 题目背景&#xff1a; 某电商公司计划将其单体架构的系统重构为微服务架构&#xff0c;以应对日益增长的业务复杂性和用户并发请求。新系统划分为用…

加固笔记本是什么意思?加固笔记本图片

在现代信息化社会中&#xff0c;笔记本电脑已经成为人们学习、办公和娱乐的必备工具。然而&#xff0c;我们常见的笔记本大多用于相对稳定、舒适的环境中&#xff0c;强调的是轻薄、便携和性能。但在一些极端复杂的行业和场景中&#xff0c;普通笔记本往往难以胜任。比如沙漠勘…

CSS高级技巧---精灵图、字体图标、布局技巧

1、精灵图1&#xff09;原理核心原理&#xff1a;将网页中的一些小背景图像整合到一张大图中&#xff0c;这样服务器只需要一次请求就可以了。精灵技术的目的&#xff1a;为了有效减少服务器接收和发送请求的次数&#xff0c;提高页面的加载速度。2&#xff09;使用使用精灵图核…

【CMake】环境变量

目录 一.环境变量简单介绍 1.1.示例1——设置与清除 1.2.示例2——全局唯一性和全局可见性 1.3.示例3 1.4.示例4 1.5.示例5 一.环境变量简单介绍 什么是环境变量&#xff1f; 我们看看官网是怎么说环境变量的&#xff1a;cmake-language(7) — CMake 4.1.1 Documentation…

Mysql杂志(十四)——Mysql逻辑架构

Mysql逻辑架构 这个图相信大家并不陌生&#xff0c;这个就是mysql的逻辑结构图下面是主包让AI生成的翻译后的逻辑结构图&#xff1a; 我们先来看看各个部分的作用是什么 第一层&#xff1a;客户端连接层 (Client Layer) 这一层负责处理所有客户端连接到服务器的请求。责任就…

Git 版本回退与撤销修改

作为版本控制管理器&#xff0c;Git应当具备版本回退等一系列功能——它的应用场景也很常见&#xff0c;当你在工作区开发时&#xff0c;忽然发现&#xff1a;怎么我这版本写的代码还不如上一版本好&#xff1f;这时&#xff0c;版本回退功能就派上用场了。一.版本回退1.概览首…

学习日记-JS+DOM-day54-9.12

1.javascript基本说明知识点核心内容重点JavaScript基础控制HTML内容与属性&#xff0c;实现动态行为&#xff08;如开灯/关灯效果&#xff09;src属性路径修正&#xff08;./与../的区别&#xff09;前端三要素HTML&#xff08;内容&#xff09;、CSS&#xff08;样式&#xf…