Java中异常的捕获与处理

引言:
        在Java编程中,异常处理是保证程序稳定性和可靠性的重要部分。良好的异常处理可以提高代码的健壮性,减少潜在错误的影响。本篇博客将详细讨论Java中异常的处理方法,包括防御式编程、异常的抛出与捕获、异常声明、try-catch捕获与处理、finally关键字、异常处理流程,并提供相关示例。

一、防御式编程

        防御式编程是一种编程思想,旨在预防错误和异常的发生。它的核心理念是在编程过程中主动检查和处理可能出现的异常情况,而不是等待错误发生后再进行处理。以下是一些防御式编程的示例:

  1. 输入验证:在接收用户输入或外部数据之前,进行有效性验证,防止非法或无效数据进入程序。
  2. 空指针检查:在使用对象引用前,检查引用是否为空,避免NullPointerException异常的发生。
  3. 数组边界检查:在访问数组元素时,保证索引不会超出数组的边界,避免ArrayIndexOutOfBoundsException异常的发生。

二、异常的抛出与捕获

1、异常的抛出:使用throw关键字抛出异常对象,将异常传递给调用者或上层的异常处理机制。
示例:

public void divide(int dividend, int divisor) throws ArithmeticException {if (divisor == 0) {throw new ArithmeticException("除数不能为零");}// 执行除法操作int result = dividend / divisor;
}

2、异常的捕获:使用try-catch块捕获并处理可能发生的异常,避免程序终止或异常向上传播。
示例:

try {// 可能会抛出异常的代码块// ...
} catch (Exception e) {// 异常处理逻辑// ...
}

三、异常声明throws

        对于可能抛出异常的方法,可以在方法声明中使用throws关键字声明该方法可能抛出的异常类型。这样可以将异常的处理责任交给方法的调用者。
示例:

public void readFile(String filePath) throws IOException {// 读取文件的代码块// ...
}

四、try-catch捕获与处理:

1、try-catch块的语法格式:

try {// 可能会抛出异常的代码块// ...
} catch (ExceptionType1 e1) {// 异常1的处理逻辑// ...
} catch (ExceptionType2 e2) {// 异常2的处理逻辑// ...
} finally {// 不管是否发生异常,都会执行的代码块// ...
}

2、catch块的多个异常捕获

可以在一个try-catch块中捕获多个不同类型的异常。
示例:

try {// 可能会抛出异常的代码块// ...
} catch (IOException | SQLException e) {// 异常处理逻辑// ...
}

五、finally关键字

        finally关键字用于定义无论是否发生异常,都会执行的代码块。通常用于资源的释放或清理操作,如关闭文件、数据库连接等。
示例:

FileWriter fileWriter = null;
try {fileWriter = new FileWriter("file.txt");// 文件写入操作// ...
} catch (IOException e) {// 异常处理逻辑// ...
} finally {if (fileWriter != null) {try {fileWriter.close();} catch (IOException e) {// 异常处理逻辑// ...}}
}

六、异常处理流程

  1. 当出现异常时,程序流程会根据异常的类型寻找匹配的catch块。
  2. 如果找到匹配的catch块,将执行catch块中的代码,并处理异常。
  3. 如果没有找到匹配的catch块,异常将向上层调用者传播,直到找到合适的处理机制或程序终止。

总结:
        通过防御式编程、异常的抛出与捕获、异常声明throws、try-catch捕获与处理、finally关键字以及异常处理流程的学习,我们可以更好地处理和管理Java中的异常,提高程序的稳定性和可靠性。

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

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

相关文章

React 中 react-i18next 切换语言( 项目国际化 )

背景 平时中会遇到需求,就是切换语言,语种等。其实总的来说都是用i18n来实现的 思路 首先在项目中安装i18n插件,然后将插件引入到项目,然后配置语言包(语言包需要你自己来进行配置,自己编写语言包&#xff…

接口自动化项目落地之HTTPBin网站

原文:https://www.cnblogs.com/df888/p/16011061.html 接口自动化项目落地系列 找个开源网站或开源项目,用tep实现整套pytest接口自动化项目落地,归档到电子书,作为tep完整教程的项目篇一部分。自从tep完整教程发布以后&#…

C语言:结构体

目录 结构体类型的声明 匿名结构体 全局结构体变量 嵌套结构体 访问结构体成员 结构的自引用 结构体变量的定义和初始化 结构体内存对齐 结构体内存对齐规则 修改默认对齐数 #pragma pack(n) offsetof 求结构体成员相对于结构体开头的偏移量的宏。 为什么存在内存…

pip list 和 conda list的区别

PS : 网上说conda activate了之后就可以随意pip了 可以conda和pip混用 但是安全起见还是尽量用pip 这样就算activate了,进入base虚拟环境了 conda与pip的区别 来源 Conda和pip通常被认为几乎完全相同。虽然这两个工具的某些功能重叠,但它们设计用于不…

硬件开发笔记(十二):RK3568底板电路电源模块和RTC模块原理图分析

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/134429973 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

清华源Certificate verification failed解决办法

Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate. Could not handshake: Error in the certificate verification. sudo update-ca-certificates

C++之type traits

目录 帮助类std::integral_constantbool_constant 主要类型分类std::is_voidis_null_pointeris_integralis_floating_pointis_arrayis_enumis_unionis_classis_functionis_pointeris_lvalue_referenceis_rvalue_referenceis_member_object_pointeris_member_function_pointer 组…

rpc依赖安装

依赖: 0、boost:用于实现多线程等; 1、protobuf:用于实现数据的序列化、反序列化,也用于定义和生成rpc数据及接口; 2、libevent:用于实现基于IO多路复用机制的网络事件循环。 其实可以直接用包…

JAVA sql 查询

-- 1. 查询员工表所有数据,并说明使用*的缺点 SELECT * from employees -- *号查询效率低 -- 2. 查询所员工的 email 全名,公司 email 统一以 "qq.com " 结尾. SELECT email from employees WHERE email like "%qq.com" -- 3. 打印公司里…

庖丁解牛:NIO核心概念与机制详解 06 _ 连网和异步 I/O

文章目录 Pre概述异步 I/OSelectors打开一个 ServerSocketChannel选择键内部循环监听新连接接受新的连接删除处理过的 SelectionKey传入的 I/O回到主循环 Pre 庖丁解牛:NIO核心概念与机制详解 01 庖丁解牛:NIO核心概念与机制详解 02 _ 缓冲区的细节实现…

Go基础面经大全(持续补充中)

Go基础 1. 基础特性 Go的优势 天生支持并发,性能高。 单一的标准代码格式,比其他语言更具可读性。 自动垃圾收集机制比Java和Python更有效,因为它与程序同时执行。 Go数据类型 int, string, float, bool, array, slice, map, channel, p…

如何将本地Portainer管理界面结合cpolar内网穿透工具实现远程浏览器访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具,可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

Android修行手册-POI操作中文API文档

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

LLM模型-讯飞星火与百度文心api调用

spark-wenxin 1-讯飞星火1_1-SparkApi.py1_2- Chat_spark.py1_3-调用api 2-百度文心2_1.code 3-两者之间比较与openai 1-讯飞星火 进入讯飞官网进行创建应用,获取相关密钥APPID,APISecret,APIKey,选择最新版本 首次调用讯飞官方a…

redis三种集群方式

redis有三种集群方式:主从复制,哨兵模式和集群。 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所…

Git的简单使用

Git的简介 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种,一个是本地仓库:开发人员自己电脑上的Git仓库,一个是远程仓库:…

centos FreeXL源码编译

安装、编译 https://www.gaia-gis.it/gaia-sins/freexl-2.0.0.zip wget https://www.gaia-gis.it/gaia-sins/freexl-2.0.0.zip#centos yum install -y minizip minizip-devel expat-devel ./configure --prefix/usr/local/freexl-2.0.0#Ubuntu apt install libminizip libmin…

学习c#的第十六天

目录 C# 正则表达式 定义正则表达式 字符转义 字符类 定位点 分组构造 Lookaround 概览 数量词 反向引用构造 替换构造 替代 正则表达式选项 其他构造 Regex 类 代码示例 实例 1 实例 2 实例 3 C# 正则表达式 正则表达式 是一种匹配输入文本的模式。.Net 框…

PHP比较漏洞, 代码审计, 字符串数字, “0e“字符串, 布尔值比较, 极限值, switch比较, in_array比较

PHP比较漏洞 一, 字符串与数字比较,0e’字符串比较 在 PHP 中处理字符串和数字比较时需要小心谨慎的重要性,尤其是在安全敏感的应用中。 在某些情况下,PHP 的类型强制转换可能会导致意外和潜在的安全漏洞。 var_dump("admin" 0); //true …

RecyclerView嵌套布局,导致RecyclerView复用失效 解决

前言:使用NestedScrollView嵌套RecyclerView。 解决步骤一:固定高度 NestedScrollView嵌套RecyclerView时,RecyclerView的高度是无限大,所以要将RecyclerView设置固定高度。在代码中固定的,灵活度更高。 binding.nest…