Java异常处理详解【入门篇】

Java异常处理详解【入门篇】

  • Java异常处理详解
    • 1. 异常的概念
    • 2. 异常的分类
      • 2.1 检查异常(Checked Exception)
      • 2.2 非检查异常(Unchecked Exception)
      • 2.3 错误(Error)
    • 3. 异常处理机制
      • 3.1 try-catch
      • 3.2 finally
      • 3.3 throw
      • 3.4 throws
    • 4. 自定义异常
    • 5. 异常处理的最佳实践
    • 6. 实际应用案例
      • 案例1:文件读取
      • 案例2:数据库连接

Java异常处理详解

异常处理是Java编程中的一个核心概念,旨在捕获和处理程序运行时的错误,确保程序的健壮性和用户体验。

1. 异常的概念

在Java中,异常是程序执行过程中出现的意外事件,可能导致程序中断。Java通过异常处理机制来捕获和处理这些错误。

2. 异常的分类

2.1 检查异常(Checked Exception)

检查异常是在编译时被检查的,必须通过try-catch块处理或在方法签名中声明。常见的包括:

  • IOException:处理I/O操作时的异常。
  • SQLException:数据库操作中的异常。

2.2 非检查异常(Unchecked Exception)

非检查异常在运行时出现,通常由程序员的错误引起。包括:

  • NullPointerException:尝试访问空对象的成员。
  • ArrayIndexOutOfBoundsException:数组索引超出范围。
  • ArithmeticException:数学运算异常,例如除零。

2.3 错误(Error)

错误表示系统级的问题,通常不由应用程序处理,例如:

  • OutOfMemoryError:JVM内存不足。
  • StackOverflowError:递归调用过深导致栈溢出。

3. 异常处理机制

3.1 try-catch

try块包围可能抛出异常的代码,catch块捕获并处理特定类型的异常。

try {int result = 10 / 0; // 可能引发异常的代码
} catch (ArithmeticException e) {System.out.println("除数不能为零: " + e.getMessage());
}

3.2 finally

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

try {// 可能抛出异常的代码
} catch (Exception e) {System.out.println("捕获异常");
} finally {System.out.println("清理资源");
}

3.3 throw

throw用于显式抛出异常,可以抛出自定义或Java提供的异常。

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

3.4 throws

throws用于方法声明中指明该方法可能抛出的异常,调用者需要处理这些异常。

public void readFile(String filePath) throws IOException {FileReader file = new FileReader(filePath);// 读文件的代码
}

4. 自定义异常

Java允许开发者定义自己的异常类,以更好地描述特定的错误情况。

class CustomException extends Exception {public CustomException(String message) {super(message);}
}

使用自定义异常:

public void validate(int number) throws CustomException {if (number < 0) {throw new CustomException("数字不能为负");}
}

5. 异常处理的最佳实践

  • 避免使用空的catch块:空的catch块可能隐藏错误,导致问题难以排查。
  • 捕获特定的异常:捕获特定的异常,而不是使用通用的Exception,以便精确处理错误。
  • 使用finally释放资源:在finally块中释放资源,确保资源被正确关闭。
  • 记录异常信息:记录异常日志以便后续分析。
  • 适当使用自定义异常:自定义异常可以更好地反映业务逻辑错误,提高代码可读性。

6. 实际应用案例

案例1:文件读取

处理文件读取时,可能会遇到FileNotFoundExceptionIOException,需要用try-catch捕获并处理。

public void readFile(String path) {try (BufferedReader reader = new BufferedReader(new FileReader(path))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}} catch (FileNotFoundException e) {System.out.println("文件未找到: " + e.getMessage());} catch (IOException e) {System.out.println("I/O错误: " + e.getMessage());}
}

案例2:数据库连接

在数据库操作中,可能会遇到SQLException,需要妥善处理,确保连接关闭。

public void queryDatabase() {Connection conn = null;try {conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "user", "password");// 执行查询} catch (SQLException e) {System.out.println("数据库错误: " + e.getMessage());} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {System.out.println("关闭连接错误: " + e.getMessage());}}}
}

通过对异常的合理处理,可以提高Java程序的健壮性,减少因异常导致的程序崩溃,提升用户体验。

版权声明:
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/
个人博客链接:https://keafmd.github.io/

看完如果对你有帮助,感谢点击下面的点赞支持!
[哈哈][抱拳]

在这里插入图片描述
加油!

共同努力!

Keafmd

感谢支持牛哄哄的柯南,期待你的三连+关注~~

keep accumulate for my dream【共勉】

                                                       ↓   ↓   ↓   合作 交流  ↓   ↓   ↓  

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

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

相关文章

CesiumJS【Basic】- #025 生成kml/kmz文件

文章目录 生成kml/kmz文件1 目标2 代码2.1 main.ts生成kml/kmz文件 1 目标 生成kml/kmz文件(kmz是kml的压缩格式) 2 代码 首先添加点线面并且赋予不同的颜色,然后导出生成kml/kmz文件 2.1 main.ts import * as Cesium from "cesium";const viewer = new Ces…

微服务 | Springboot整合GateWay+Nacos实现动态路由

1、简介 路由转发 执行过滤器链。 ​ 网关&#xff0c;旨在为微服务架构提供一种简单有效的统一的API路由管理方式。同时&#xff0c;基于Filter链的方式提供了网关的基本功能&#xff0c;比如&#xff1a;鉴权、流量控制、熔断、路径重写、黑白名单、日志监控等。 基本功能…

YOLO:一种革命性的实时目标检测算法

目标检测是计算机视觉领域中的一项基础任务&#xff0c;它涉及到在图像或视频帧中识别和定位多个目标对象。传统的目标检测方法&#xff0c;如R-CNN系列算法&#xff0c;虽然在精度上取得了不错的成绩&#xff0c;但它们通常需要多步骤的处理过程&#xff0c;导致检测速度较慢&…

linux 删除文件(批量删除文件)

一般的删除文件的操作 删除几个文件 rm 文件1 文件2 删除文件夹下面所有文件 rm * -rf 删除某些固定字母开头的文件 rm xxx* 删除一类文件 rm .txt 批量删除文件 首先查找我们要删除的某类批量的文件&#xff1a; find . -maxdepth 1 -regex “.ws.” maxdepth参数为1表示只在当…

4054充电芯片经常烧坏?Type-c口的烧坏充电芯片如何去解决

4054是一款常用的锂电池充电管理芯片&#xff0c;广泛应用于各种电子设备中。然而&#xff0c;有时候4054会出现经常烧坏的情况&#xff0c;故而让客户对我们的产品质量产生的担忧。特别是现如今快充的时代到来&#xff0c;快充头的使用&#xff0c;出现了更多4054烧坏的现象。…

php开发的系统/软件如何实现闭源?

想到这个问题的起因是想找一款更好用的服务器管理软件&#xff0c; 看到CPanel的介绍“对国际主机市场了解的朋友一定听说过cPanel&#xff0c;它是世界上功能强大&#xff0c;容易使用&#xff0c;因而比较受用户欢迎的虚拟主机控制系统。cPanel 是一套在网页寄存业中最享负盛…

在python docker中安装ESL库

概述 功能需求&#xff0c;把python脚本移植到docker中。 因为python脚本中有使用freeswitch的ESL接口&#xff0c;所以需要安装python-ESL依赖库。 本文记录在python:3.10.14-slim的docker镜像上编译安装python-ESL依赖库的流程。 环境 docker engine: Version 24.0.6 d…

MySQL的三种驱动类型

MySQL 支持多种驱动类型&#xff0c;常见的包括&#xff1a; MySQL Native Driver (mysqlnd)&#xff1a; 这是MySQL官方推荐的驱动类型&#xff0c;它是PHP的一个内置扩展。mysqlnd 提供了更高的性能和更好的兼容性&#xff0c;支持MySQL 4.1及以上版本。 MySQL Improved Ext…

在.NET Core中,config和ConfigureServices的区别和作用

在.NET Core中&#xff0c;config和ConfigureServices是两个不同的概念&#xff0c;它们在应用程序的启动和配置过程中扮演着不同的角色。 ConfigureServices&#xff1a;这是ASP.NET Core应用程序中的一个方法&#xff0c;位于Startup类的内部。它的作用是配置依赖注入(DI)容器…

湘潭大学概率论总结

文章目录 前言试卷结构反思第一个填空题某个大题矩估计和最大似然估计算方差最后 前言 自己其实寒假的时候就想学这个了&#xff0c;但是那个时候在acm训练&#xff0c;就没有学&#xff0c;但是3月份退队了&#xff0c;还是没有学&#xff0c;完全就是自己太拖延的原因&#…

浅谈返利app架构设计

浅谈返利app架构设计 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨返利App的架构设计&#xff0c;这是一个技术性的话题&#xff0c;我们将深入…

【ES】--Elasticsearch的翻页详解

目录 一、前言二、from+size浅分页1、from+size导致深度分页问题三、scroll深分页1、scroll原理2、scroll可以返回总计数量四、search_after深分页1、search_after避免深度分页问题一、前言 ES的分页常见的主要有三种方式:from+size浅分页、scroll深分页、search_after分页。…

基于Java微信小程序同城家政服务系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

Nginx配置达梦数据库代理及Nginx模块内容总结

Nginx 代理达梦数据库配置 叨叨达梦数据库代理Nginx模块说明stream模块main 全局块event块http块server块location块 本文参考了 https://blog.csdn.net/qq_42402854/article/details/132843413 叨叨 由于公司网络安全问题&#xff0c;应用服务器端开开放需要走策略申请&#…

C#面:举列 a=10,b=15,在不用第三方变量的前提下,把a,b的值互换

要在不使用第三方变量的前提下交换a和b的值&#xff0c;可以使用异或运算。异或运算的特性是&#xff0c;对于两个相同的数进行异或运算&#xff0c;结果为0&#xff1b;对于任意数与0进行异或运算&#xff0c;结果为该数本身。因此&#xff0c;可以通过多次异或运算来实现变量…

【Sublime】Sublime Text 中运行终端

Sublime Text 本身并不是一个终端仿真器&#xff0c;可以使用插件来在 Sublime Text 中集成终端功能。最常用的插件之一是“Terminal”。 使用“Terminal”插件在 Sublime Text 中启动终端 以下是安装和使用该插件的步骤&#xff1a; 安装 Package Control&#xff1a; 如果你…

面试突击:HashMap 源码详解

本文已收录于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持续更新&#xff09; 数据结构 JDK1.8 之前 JDK1.8 之前 HashMap 采用 数组和链表 结合的数据结构。如下图&#xff1a; HashMap 将 key 的 hashCode 经过扰动函数处理过后得到 hash 值&#…

网络编程客户端和服务端连接流程

服务器端&#xff1a;socket()-->bind( )-->listen()-->accept()-->read()/write()--->close()socket()//创建套接字 bind()//命名socket&#xff0c;分配套接字地址 listen()//监听状态&#xff0c;等待连接请求状态 accept()//允许连接(被动连接) read()/writ…

java第二十九课 —— 断点 | 零钱通项目

断点调试&#xff08;debug&#xff09; 实际需求 在开发中&#xff0c;新手程序员在查找错误时&#xff0c;这时老程序员就会温馨提示&#xff0c;可以用断点调试步一步的看源码执行的过程&#xff0c;从而发现错误所在。 重要提示&#xff1a;在断点调试过程中&#xff0c;…

Open3D(C++) 删除点云中重复的点

目录 一、算法原理1、重叠点2、主要函数二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、重叠点 原始点云克隆一份   构造重叠区域   合并点云获得重叠点 2、主要…