Java 异常处理(6/30)

news2024/11/26 15:00:07

目录

Java 异常处理

1. 什么是异常

2. 异常处理的关键字

2.1 try-catch 语句

2.2 多个 catch 块

2.3 finally 块

2.4 throw 和 throws

3. 自定义异常

4. 异常处理的最佳实践

总结与后续


Java 异常处理

在软件开发中,异常处理(Exception Handling)是确保程序稳定性和鲁棒性的重要技术。Java 提供了一套完善的异常处理机制,使开发者能够优雅地应对运行时错误并进行适当的处理。本模块将介绍 Java 的异常体系结构、如何捕获和处理异常、自定义异常以及最佳实践。

1. 什么是异常

异常 是程序运行过程中出现的问题,可能是因为非法的数据输入、文件未找到、网络连接失败等原因。Java 中的异常是对象,表示程序运行期间发生的问题。

Java 中的异常分为以下两类:

  • 检查异常(Checked Exception):必须在编译时处理,例如 IOExceptionSQLException

  • 运行时异常(Unchecked Exception):在编译时不要求强制处理,例如 NullPointerExceptionArithmeticException

  • 错误(Error):表示系统级的严重问题,例如 OutOfMemoryError,通常程序无法处理这些错误。

2. 异常处理的关键字

Java 提供了以下关键字用于处理异常:

  • try:包含可能会抛出异常的代码块。

  • catch:用于捕获并处理 try 块中抛出的异常。

  • finally:无论是否发生异常,finally 代码块都会执行,通常用于释放资源。

  • throw:手动抛出一个异常。

  • throws:用于声明一个方法可能抛出的异常。

2.1 try-catch 语句

try-catch 语句用于捕获和处理异常,当 try 块中的代码抛出异常时,控制流会跳转到匹配的 catch 块进行处理。

语法

try {
    // 可能会抛出异常的代码
} catch (ExceptionType e) {
    // 处理异常的代码
}

示例

try {
    int result = 10 / 0;  // 可能会抛出 ArithmeticException
} catch (ArithmeticException e) {
    System.out.println("不能除以零");
}

在这个例子中,由于尝试将 10 除以 0,try 块会抛出 ArithmeticException,然后 catch 块捕获该异常并输出 "不能除以零"。

2.2 多个 catch 块

一个 try 块可以有多个 catch 块,用于捕获不同类型的异常。

示例

try {
    int[] numbers = {1, 2, 3};
    System.out.println(numbers[5]);  // 可能会抛出 ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("数组索引越界");
} catch (Exception e) {
    System.out.println("发生了其他异常");
}

在这个例子中,如果数组访问越界,会捕获到 ArrayIndexOutOfBoundsException 并输出相应的信息。

2.3 finally 块

finally 块中的代码无论是否发生异常都会执行,通常用于释放资源,如关闭文件、释放数据库连接等。

示例

try {
    int result = 10 / 2;
    System.out.println("结果是: " + result);
} catch (ArithmeticException e) {
    System.out.println("不能除以零");
} finally {
    System.out.println("执行 finally 块,无论是否发生异常");
}

在这个例子中,无论 try 块是否抛出异常,finally 块中的代码都会执行。

2.4 throw 和 throws

  • throw:用于手动抛出一个异常。

  • throws:用于声明一个方法可能抛出的异常。

示例

public void checkAge(int age) {
    if (age < 18) {
        throw new IllegalArgumentException("年龄必须大于 18 岁");
    }
}

public void readFile(String fileName) throws IOException {
    // 方法声明中使用 throws
    FileReader reader = new FileReader(fileName);
}

checkAge() 方法中,当 age 小于 18 时,手动抛出 IllegalArgumentException 异常。

3. 自定义异常

在 Java 中,可以创建自定义异常类,以满足应用程序的特定需求。自定义异常类通常继承自 ExceptionRuntimeException

示例

// 自定义异常类
public class InvalidAgeException extends Exception {
    public InvalidAgeException(String message) {
        super(message);
    }
}

public class Main {
    public void validateAge(int age) throws InvalidAgeException {
        if (age < 0) {
            throw new InvalidAgeException("年龄不能为负数");
        }
    }

    public static void main(String[] args) {
        Main main = new Main();
        try {
            main.validateAge(-5);
        } catch (InvalidAgeException e) {
            System.out.println(e.getMessage());
        }
    }
}

在这个例子中,InvalidAgeException 是自定义的异常类,用于处理年龄非法的情况。

4. 异常处理的最佳实践

  • 尽量使用具体的异常类型:捕获异常时,尽量捕获具体的异常类型,而不是 Exception,这样有助于更精确地处理异常。

  • 避免过度捕获:不要捕获不必要的异常,尤其是 RuntimeException,否则可能隐藏程序中的错误。

  • 使用 finally 块释放资源:无论是否发生异常,都应该在 finally 块中释放资源,如关闭文件、数据库连接等。

  • 记录异常信息:使用日志工具记录异常信息,便于后期调试和分析。

总结与后续

在本模块中,我们学习了 Java 的异常处理机制,包括如何捕获和处理异常、使用 throwthrows 关键字手动抛出和声明异常,以及如何编写自定义异常类。掌握异常处理有助于编写健壮和稳定的 Java 程序。

在下一模块中,我们将讨论 Java 中的 集合框架,学习如何使用集合类来存储和操作数据,从而编写出更高效的代码。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu22.04安装向日葵

1、下载deb安装包 进入官网下载图形版本&#xff1a;https://sunlogin.oray.com/download/linux?typepersonal 2、命令行安装 sudo chmod x 文件名.deb sudo dpkg -i 文件名.deb 3、开始报错的看这里&#xff01; 首先展示一下安装成功的效果图&#xff1a; 接下来是我安…

小米手机投屏到Windows笔记本电脑的3个方法,随便选一个

方法一&#xff1a;Windows系统自带的投屏功能 Windows系统本身的功能很多&#xff0c;其中一项就是接收别的电脑或手机的投屏。 操作步骤一&#xff0c;在Windows电脑里进入【设置】&#xff0c;点击【系统】&#xff0c;往下翻页&#xff0c;找到【投影到此电脑】。 如果这…

漏洞挖掘 | 通过域混淆绕过实现账户接管

由于这是一个私有项目&#xff0c;我将使用 example.com 来代替。 很长一段时间以来&#xff0c;我一直想在漏洞赏金项目中找到一个账户接管&#xff08;ATO&#xff09;漏洞。于是&#xff0c;我开始探索项目范围内的 account.example.com。 我做的第一件事就是注册一个新账…

加密软件有什么功能?

加密软件是一种专门用于保护数据安全的工具&#xff0c;它通过复杂的加密算法来确保数据在传输和存储过程中的机密性和完整性。以下是加密软件通常具备的主要功能&#xff1a; 一、数据加密 文件加密&#xff1a;能够对单个文件或整个文件夹进行加密&#xff0c;确保只有授权…

Python bs4 结合 Scrapy,进行数据爬取和处理

Python bs4 结合 Scrapy&#xff0c;进行数据爬取和处理 在现代数据分析和机器学习领域&#xff0c;数据爬取是获取网页数据的常用方法。Python 提供了许多工具来进行网页爬取&#xff0c;其中 Scrapy 和 BeautifulSoup&#xff08;bs4&#xff09;是最常用的两个库。Scrapy 是…

【p2p、分布式,区块链笔记 Torrent】webtorrent.min.js的实现之appendTo()函数

官方给出的示例通过appendTo函数渲染文件对象&#xff0c;通过torrent.files的元素对象调用&#xff1a; const WebTorrent require(webtorrent)const client new WebTorrent()// Sintel, a free, Creative Commons movie const torrentId magnet:?xturn:btih:08ada5a7a61…

ALIGN_ Tuning Multi-mode Token-level Prompt Alignment across Modalities

文章汇总 当前的问题 目前的工作集中于单模提示发现&#xff0c;即一种模态只有一个提示&#xff0c;这可能不足以代表一个类[17]。这个问题在多模态提示学习中更为严重&#xff0c;因为视觉和文本概念及其对齐都需要推断。此外&#xff0c;仅用全局特征来表示图像和标记是不…

MySQL数据集成至金蝶云星空的解决方案

MySQL数据集成至金蝶云星空的解决方案 SYB生产用料清单新增-深圳天一-半成品-好&#xff1a;MySQL数据集成到金蝶云星空的技术实现 在企业信息化系统中&#xff0c;数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体案例——如何将MySQL中的生产用料清…

javaweb----VS code

前端开发神器&#xff1a;VS Code → 速度快、体积小、插件多 VS Code 安装官网&#xff1a;https://code.visualstudio.com/download VS Code一些必备的插件安装&#xff1a; 1、Chinese (Simplified) 简体中文 2、Code Spell Checker 检查拼写 3、HTML CSS Support 4…

【新闻转载】“假冒 LockBit”来袭:勒索软件借助 AWS S3 偷窃数据,威胁升级

关键要点 Trend团队发现了一些利用 Amazon S3&#xff08;简单存储服务&#xff09;传输加速功能的 Golang 勒索软件样本&#xff0c;用于窃取受害者的文件并上传至攻击者控制的 S3 存储桶。 这些样本中硬编码的 Amazon Web Services (AWS) 凭证被用于追踪与恶意活动关联的 AW…

第十五章 Vue工程化开发及Vue CLI脚手架

目录 一、引言 二、Vue CLI 基本介绍 三、安装Vue CLI 3.1. 安装npm和yarn 3.2. 安装Vue CLI 3.3. 查看 Vue 版本 四、创建启动工程 4.1. 创建项目架子 4.2. 启动工程 五、脚手架目录文件介绍 六、核心文件讲解 6.1. index.html 6.2. main.js 6.3. App.vue 一、…

BEV:针孔相机坐标转换

一 、背景 自动驾驶中经常涉及到不同坐标系之间的坐标转换&#xff0c;在BEV方案中用的比较多的是自车坐标到图像坐标的转换&#xff0c;系统整理了一下坐标转换过程流程。 二 、方法 旋转矩阵计算方法&#xff1a; translation: 平移参数[‘x’, ‘y’, ‘z’] 高阶畸变模型…

开关灯问题(c语言)

样例&#xff1a;10 10 &#xff0c;输出&#xff1a;1&#xff0c;4&#xff0c;9 5 5 &#xff0c;输出&#xff1a;1&#xff0c;4 代码如下 #include<stdio.h> //引入bool值的概念 #include<stdbool.h> int main() {int n 0;//n为灯的数量int m 0;…

centos虚拟机部署opengauss数据库

一、基本信息 1、虚拟机安装的centos版本 2、opengauss版本 地址&#xff1a;https://opengauss.org/zh/download/ 3、opengauss和gaussdb的区别 高斯数据库&#xff08;GaussDB&#xff09;是云数据库&#xff0c;需要购买。 openGaussDB是开源数据库&#xff0c;可以免费…

搜索TV 1.2.4 | 适用于TV端的浏览器应用,设计简洁,功能强大

Klonsdif搜索TV版是一款专为TV端设计的浏览器应用&#xff0c;界面简洁&#xff0c;操作简单&#xff0c;保留最纯粹的浏览体验。支持使用百度、必应、360、搜狗、秘塔AI搜索、360AI搜索、bilibili等内置搜索引擎&#xff0c;也可以直接输入网址访问。全免费、无广告&#xff0…

Spring Boot 实现文件上传下载功能

文章目录 一、原理分析1.1 请求类型1.2 服务器解析 二、功能实现2.1 创建项目并导入依赖2.2 文件上传功能实现2.2.1 文件上传 Service2.2.2 文件上传 Controller 2.3 文件下载功能实现2.3.1 文件下载 Service2.3.2 文件下载 Controller 2.4 文件上传前端代码(可选)2.4.1 上传文…

注册信息合理性验证

表单是网页中的一个重要功能,主要用于用户信息的收集。使用JavaScript进行表单验证对于提升用户体验、减轻服务器负担、确保数据准确性、增强安全性和提高开发效率等方面都具有重要意义。本文详细敍述进行合理化验化必要性和具体实现方法。 一 表单项合理性必要性 主要体现在…

4款专业音频在线剪辑工具帮你开启创意之路。

音频在线剪辑工具能够为我们提供很大的便利&#xff0c;对于不管是专业的音乐制作人还是音频创作爱好者来说&#xff0c;都能借助一些音频编辑工具来充分发挥自己的创意。所以这一次&#xff0c;我要给大家介绍几个专业方便的音频剪辑工具。 1、福昕音频在线 直达链接&#x…

pdf页面提取全攻略,试试这几个简单方法,提升工作效率(收藏篇)

怎么提取pdf页面&#xff1f;在日常的办公生活中&#xff0c;我们经常需要使用到pdf文件&#xff0c;因此我们经常需要对PDF文档进行一些页面处理&#xff0c;比如提取PDF文件中的其中一个页面。那要怎么提取pdf文件中的其中一页呢&#xff1f;其实很简单&#xff0c;下面分享几…

【计算机网络】单播帧和广播帧在一个局域网内部的传播过程

我们引入这样的一个模型。 路由器可以连接多个网络&#xff0c;在路由器的这一端&#xff0c;我们用交换机集线器连接了很多节点。 这些节点共同组成了一个局域网。 而路由器的另外两个端口又分别连接了其他的网络。MAC地址这个概念是数据链路层才拥有的东西&#xff0c;物理…