【Java】异常的处理-方式【主线学习笔记】
文章目录
- 前言
- 1、处理概述
- 2、Java异常处理机制(方式)
- 方式一(抓抛模型):`try-catch-finally`
- 方式二:`throws` + 异常类型
- 总结
前言
Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。
1、处理概述
在编写程序时,可能会遇到各种错误或异常情况。例如,在执行除法运算时,分母为零会导致程序崩溃;访问数组时超出边界会引发ArrayIndexOutOfBoundsException。为了避免这些问题,程序员需要在可能出现错误的地方加上检查代码,这往往会导致代码冗长且可读性差。因此,Java引入了异常处理机制,能够集中处理错误,使得程序更加简洁、优雅并易于维护。
2、Java异常处理机制(方式)
Java的异常处理机制主要包括以下几种方式:
方式一(抓抛模型):try-catch-finally
这是Java最常用的异常处理结构。
- 过程1:“抛”,程序在执行的过程当中,一旦出现异常,就会在出现异常的代码处,生成对应异常类的对象,并将此对象抛出一旦出,此程序就不执行其后的代码了。
- 过程2:“抓”,针对于过程1中抛出的异常对象,进行捕获处理。此捕获处理的过程,就称为抓。一旦将异常进行了处理,代码就可以继续执行。
其基本语法如下:
try {// 可能会抛出异常的代码块
} catch (异常类型1 e) {// 处理异常的代码块
} catch (异常类型2 e) {// 处理异常的代码块
} finally {// 无论是否发生异常,都会执行的代码块
}
-
try块:用于包围可能抛出异常的代码。如果代码块中发生异常,就会自动生成一个对应异常类的对象,并将此对象抛出。
-
catch块:用于处理try块中发生的特定类型的异常。针对try中抛出的异常的对象,与catch语句进行匹配,一旦匹配上,就进入catch语句进行处理。可以有多个catch块来处理不同类型的异常。
-
finally块:可选的代码块,无论try块或者catch中是否发生异常,无论try中或者catch中是否存在return语句等,finally块中的代码都会执行。通常用于清理资源,如关闭文件、数据库连接等。唯一例外,使用System.exit(0)来种植当前正在运行的java虚拟机。
使用细节:
多个catch块的处理:
- 同层次异常:如果声明了多个catch块,不同异常类型之间不存在父子关系时,顺序可以自由安排。
- 父子类关系:如果多个异常类型存在父子关系,必须将子类的catch块放在父类的前面。否则,父类的catch块会捕获所有子类异常,导致子类catch块无法被执行,从而出现编译错误。
catch中异常处理的方式,方式有多种:
- 自定义输出语句: 可以编写自定义的输出信息,提示用户或记录日志。这种方式适用于简单的错误处理。
- printStackTrace(): 使用此方法可以打印异常的详细信息,包括异常的类型、错误信息以及异常发生时的调用栈。 因为它能够帮助开发者快速定位问题。
- getMessage(): 使用此方法可以获取发生异常的原因,返回一个描述性的信息。适用于需要简要提示的场景。
什么样的代码需要放在finally当中?
- 在开发中,一些资源,如输入流、输出流,数据库连接、Socket连接等资源,在使用完以后,必须显示的进行关闭操作,否则,GC不会自动的回收这些资源,从而导致内存泄漏,因此必须将这些操作声明在finally中。
try中声明的变量,出了try结构之后,就不进行调用了。
示例:
try {int result = 10 / 0; // 可能会抛出ArithmeticException
} catch (ArithmeticException e) {System.out.println("除数不能为零!" + e.getMessage());
} finally {System.out.println("无论如何我都会执行。");
}
方式二:throws + 异常类型
throws关键字用于声明方法可能抛出的异常。这并不处理异常,而是将异常抛给了给该方法的调用者,该调用者仍然需要考虑如何处理相关异常。语法如下:
public void myMethod() throws 异常类型 {//表示下面代码中可能会出现的代码// 可能抛出异常的代码
}
当方法调用者调用这个方法时,必须使用try-catch语句来处理可能抛出的异常。
使用细节
- 子类重写的方法抛出的异常类型可以与父类被重写的方法抛出的异常类型相同,或是父类被重写的方法抛出的异常类型的子类。
示例:
public void readFile(String filePath) throws IOException {FileReader file = new FileReader(filePath);// 处理文件
}public void process() {try {readFile("somefile.txt");} catch (IOException e) {System.out.println("文件读取失败!" + e.getMessage());}
}
总结
Java的异常处理机制通过try-catch-finally和throws关键字,有效地将错误处理与正常程序逻辑分开,增强了代码的可读性和可维护性。使用异常处理,可以更优雅地处理程序运行中的各种意外情况,提高了程序的健壮性。
如果你有具体的例子或想讨论的细节,请告诉我!
相关文章:
【Java】异常的处理-方式【主线学习笔记】
文章目录 前言1、处理概述2、Java异常处理机制(方式)方式一(抓抛模型):try-catch-finally方式二:throws 异常类型总结 前言 Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行…...
React modal暴露ref简洁使用
父组件使用 import { useRef } from react import { FormModal } from ./modalconst IndexRoute () > {const formRef useRef<any>()const openModal (row?: any) > {const params {title: row?.id ? 【${row.name}】编辑 : 创建,isView: false,row,api: r…...
小米路由器ax1500+DDNS+公网IP+花生壳实现远程访问
有远程办公的需求,以及一些其他东西。 为什么写? ax1500路由器好像没搜到相关信息。以及其中有一点坑。 前置 公网ip Xiaomi路由器 AX1500 MiWiFi 稳定版 1.0.54 实现流程 花生壳申请壳域名https://console.hsk.oray.com/ 这里需要为域名实名认证 …...
毕设分享 大数据用户画像分析系统(源码分享)
文章目录 0 前言2 用户画像分析概述2.1 用户画像构建的相关技术2.2 标签体系2.3 标签优先级 3 实站 - 百货商场用户画像描述与价值分析3.1 数据格式3.2 数据预处理3.3 会员年龄构成3.4 订单占比 消费画像3.5 季度偏好画像3.6 会员用户画像与特征3.6.1 构建会员用户业务特征标签…...
使用 Redis 实现分布式锁:原理、实现与优化
在分布式系统中,分布式锁是确保多个进程或线程在同一时间内对共享资源进行互斥访问的重要机制。Redis 作为一个高性能的内存数据库,提供了多种实现分布式锁的方式。本文将详细介绍如何使用 Redis 实现分布式锁,包括基本原理、实现方法、示例代…...
Android常用C++特性之std::make_pair
声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。 std::make_pair 是 C 标准库中的一个函数模板,用于创建一个 std::pair 对象。std::pair 是一种可以存储两个不同类型值的简单数据结构,类似于二…...
Kafka-参数详解
一、上下文 从《Kafka-初识》中可以看到运行kafka-console-producer和 kafka-console-consumer来生产和消费数据时会打印很多参数,这些参数给我们应对多种场景提供了遍历,除了producer和consumer的提供了参数外,Kafka服务器集群中的broker也…...
Docker Overlay2 空间优化
目录 分析优化数据路径规划日志大小限制overlay2 大小限制清理冗余数据 总结 分析 overlay2 目录占用磁盘空间较大的原因通常与 Docker 容器和镜像的存储机制以及它们的长期累积相关,其实我之前在 Docker 原理那里已经提到过了。 通常时以下几种原因导致ÿ…...
第 3 章:使用 Vue 脚手架
1. 初始化脚手架 1.1 说明 Vue 脚手架是 Vue 官方提供的标准化开发工具(开发平台)。最新的版本是 5.x。文档: https://cli.vuejs.org/zh/ 1.2 具体步骤 第一步(仅第一次执行):全局安装vue/cli。 npm install -g vu…...
Spring 循环依赖详解:问题分析与三级缓存解决方案
在Spring框架中,循环依赖(Circular Dependency)是指多个Bean相互依赖,形成一个循环引用。例如,Bean A依赖于Bean B,而Bean B又依赖于Bean A。这种情况在Bean创建时可能导致Spring容器无法正常完成初始化&am…...
爬虫prc技术----小红书爬取解决xs
知识星球:知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具知识星球是创作者连接铁杆粉丝,实现知识变现的工具。任何从事创作或艺术的人,例如艺术家、工匠、教师、学术研究、科普等,只要能获得一…...
uni-app之旅-day06-加入购物车
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言8.0 创建 cart 分支8.1 配置 vuex8.2 创建购物车的 store 模块8.3 在商品详情页中使用 Store 中的数据8.4 实现加入购物车的功能8.5 动态统计购物车中商品的总数…...
【Kubernetes】常见面试题汇总(五十六)
目录 123. pod 创建失败? 124. kube-flannel-ds-amd64-ndsf7 插件 pod 的 status 为 Init:0/1 ? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二&#x…...
LabVIEW激光诱导击穿光谱识别与分析系统
LabVIEW激光诱导击穿光谱(LIBS)分析系统利用高能量脉冲激光产生高温等离子体,通过分析等离子体发出的光谱来定性分析样品中的元素种类。该系统的开发集成了软件与硬件的设计,实现了自动识别和定性分析功能,适用于环境监…...
Redis的基础篇
Redis的基础篇 1.在CentOs7上安装Redis(最好不要在windows上装,版本少) 1.安装gcc --> yum install gcc tcl(可能会报错,重新安装yum就行了) 2.下载redis --> 最好是6.2上的版本 3.解压redis --> tar -zxvf redis-6.2.…...
java和python哪个好
Java和Python各有优缺点,适合不同的应用场景,具体看你需要在哪种情况下使用编程语言。以下是Java和Python的一些对比,帮助你决定哪种更适合你的需求: 性能 Java:编译型语言,编译成字节码运行在Java虚拟机&…...
Electron + ts + vue3 + vite
正常搭建脚手架:npm create vitelatest 项目名称 安装electron的相关依赖:注:安装时终端url要项目名那一层 安装npm install electron -D安装打包工具:npm install electron-builder -D开发工具:npm install electron-…...
《大规模语言模型从理论到实践》第一轮学习--分布式训练
基础知识 5分钟看懂电脑硬件配置 - 知乎 (zhihu.com) 显存 定义:显存是显卡上的专用高速缓存,用于存储图形处理器(GPU)在处理图像和视频数据时所需的临时数据。 功能:显存的主要作用是提供GPU快速访问的数据存储&a…...
多模态智能
研究背景: 深度学习从1.0的端到端走向2.0的预训练,通过大规模预训练来记忆多模态数据中共性知识,增强对下游任务的学习能力。 深度学习1.0:特定任务有标注训练数据->随机初始化训练->最终模型 深度学习2.0:大规…...
【机器学习(十三)】机器学习回归案例之股票价格预测分析—Sentosa_DSML社区版
文章目录 一、背景描述二、Python代码和Sentosa_DSML社区版算法实现对比(一) 数据读入(二) 特征工程(三) 样本分区(四) 模型训练和评估(五) 模型可视化 三、总结 一、背景描述 股票价格是一种不稳定的时间序列,受多种因素的影响。影响股市的外部因素很多,主要有经济因素、政治因…...
数据库备份与恢复策略
数据库备份与恢复策略 1. 技术分析 1.1 备份概述 备份是数据安全的基石: 备份类型完全备份: 全部数据增量备份: 变化数据差异备份: 上次完全备份后的变化备份策略:定期完全备份增量备份补充实时备份1.2 恢复策略 恢复类型完全恢复: 恢复到最新状态时间点恢复: 恢复到…...
protobufjs 编译命令选错就报错?一文搞懂 pbjs 的 -w 参数(es6 vs commonjs 实战解析)
ProtobufJS编译模块类型选型指南:ES6与CommonJS的深度对比与实战避坑 最近在Vite项目中集成Protobuf时,编译后的模块导入总是抛出The requested module does not provide an export named错误。这个问题困扰了我整整两天,最终发现根源在于pbj…...
Windows权限终极指南:5个场景掌握TrustedInstaller权限提升
Windows权限终极指南:5个场景掌握TrustedInstaller权限提升 【免费下载链接】RunAsTI Launch processes with TrustedInstaller privilege 项目地址: https://gitcode.com/gh_mirrors/ru/RunAsTI 当你面对Windows系统那些"拒绝访问"的提示时&#…...
ArcMap新手必看:手把手教你给‘无家可归’的图层安个‘家’(Define Projection保姆级教程)
ArcMap坐标系急救指南:从“Unknown”到精确定位的完整解决方案 引言:当图层变成“流浪者”时 第一次在ArcMap中看到图层属性显示“Unknown”或“Undefined”时,很多新手会陷入困惑——这些数据明明有坐标数值,为什么软件却无法识别…...
纯音乐制作难题,智能创作轻松化解
前言:音乐人的创作困境,真的太戳心了 你有没有过这样的时刻?脑子里突然冒出一段超有感觉的旋律,想把它做成完整纯音乐,却被现实难题卡住:不懂编曲,不知道怎么搭配乐器;不会用专业软…...
FPGA远程更新不止QUICKBOOT:深入MultiBoot机制,从Golden镜像设计到安全回滚的全链路解析
FPGA远程更新的安全架构设计:从MultiBoot机制到容错恢复的全链路实践 在工业自动化、通信基带和航空航天等关键领域,FPGA的远程更新能力直接关系到系统的可靠性与维护成本。传统QuickBoot方案虽然能实现基础的程序加载,但在面对复杂现场环境时…...
FreeRTOS移植避坑指南:当你的芯片不在官方支持列表时(以S3C2440为例)
FreeRTOS移植实战:非官方支持芯片的定制化开发方法论 当你的项目需要将FreeRTOS移植到非官方支持芯片时,整个过程就像在未知海域航行——没有现成的海图,但掌握正确的导航方法同样能到达目的地。以经典的ARM9芯片S3C2440为例,这种…...
昇腾NPU算子开发进阶:深入理解ops-tensor中的解决方案注册机制 [特殊字符]
昇腾NPU算子开发进阶:深入理解ops-tensor中的解决方案注册机制 🚀 【免费下载链接】ops-tensor ops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计&a…...
stressapptest 参数解析源码详解:从命令行到内存测试的完整配置流程
StressAppTest 参数解析与源码实现:从命令行到内存测试的深度技术解析 在服务器硬件验证和系统稳定性测试领域,内存子系统的可靠性验证一直是工程师面临的核心挑战之一。StressAppTest(简称SAT)作为Google开源的一款专业级压力测试…...
出口欧美设备机箱:必须符合HASCO模架与DME顶针标准
在出口欧美市场的设备机箱领域,符合HASCO模架与DME顶针标准是至关重要的。这不仅关乎产品的质量和性能,还影响着企业在国际市场的竞争力。本文将深入探讨这一标准的重要性,并结合深圳市机汇五金制品有限公司(以下简称“机汇五金”…...
