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【共勉】

                                                       ↓   ↓   ↓   合作 交流  ↓   ↓   ↓  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1/7精确到100位,1000位,100000位怎么算?

双精度 Console.WriteLine("1/7的值是" (double)1 / 7);结果:0.14285714285714285 即使使用双精度浮点数&#xff0c;精确的位数也是有限的&#xff0c;如果想精确到小数点后100位&#xff0c;1000位&#xff0c;甚至更高哪&#xff1f; 朴素的除法 除数 余数 商…

麒麟桌面系统CVE-2024-1086漏洞修复

原文链接&#xff1a;麒麟桌面操作系统上CVE-2024-1086漏洞修复 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇在麒麟桌面操作系统上修复CVE-2024-1086漏洞的文章。漏洞CVE-2024-1086是一个新的安全漏洞&#xff0c;如果不及时修复&#xff0c;可能会对系统造成安全…

设计模式 - Observer Pattern 观察者模式

文章目录 定义观察者模式的实现构成构成UML图 观察者模式的代码实现场景代码实现 总结优点缺点应用场景 其他设计模式文章&#xff1a; 定义 观察者模式是行为型模式的一种&#xff0c;它定义对象间的一种一对多的依赖关系&#xff0c;使得每当一个对象改变状态&#xff0c;它…

ThreadPoolExecutor线程池创建线程

线程池介绍 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时&#xff0c;任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源&#xff0c;如果无限制的创建&#xff0c;不仅会消耗系统资源&#…

find()方法——字符串首次出现的索引位置

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 find()方法实现查询一个字符串在其本身字符串对象中首次出现的索引位置&#xff0c;如起始位置从11到结束位置17之间子字符串出现的位置&a…

Profinet IO从站数据 转EtherCAT项目案例

这里是引用 目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 使用PRONETA软件获取PROFINET IO从站的配置信息 2 5 设置网关采集PROFINETIO从站设备数据 5 6 启动ETHERCAT从站转发采集的数据 8 7 选择槽号和数据地址 9 8 选择子槽号 11 9 案例总结 12 1 案例说明 设置…

【shell脚本实战案例】主机状态监控脚本

文章目录 案例需求脚本应用场景解决问题脚本思路实现代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻&#xff0c…

统计信号处理基础 习题解答11-6

题目 考虑例11.1对WGN中单个正弦信号的数据模型&#xff0c;将模型重写为 其中&#xff1a; &#xff0c;证明A的PDF是瑞丽的&#xff0c;的PDF是&#xff0c;且和是相互独立的。 解答 根据例11.1&#xff1a; 由于N维联合高斯分布为&#xff1a; 由&#xff1a; 因此&#…

ProfibusDP主站转Modbus模块连接称重仪配置案例

在工业自动化领域&#xff0c;常常需要将不同协议的设备进行连接。比如&#xff0c;将ProfibusDP主站转Modbus模块&#xff08;XD-MDPBM20&#xff09;用于连接称重仪&#xff0c;可以实现不同设备之间的数据交换和通信。ProfibusDP主站转Modbus网关&#xff08;XD-MDPBM20&…

一招教你用python代码给朋友写一个爱心代码

有人问我马上要跟女朋友一周年了&#xff0c;能不能用代码给他写一个爱心代码呢&#xff1f;那算你问对人了&#xff0c;来上才艺 可以使用Python的turtle模块来绘制一个爱心形状。下面是一个简单的示例代码&#xff0c;我将详细解释每一步&#xff1a; import turtle # 创建一…

(已解决)Adobe Flash Player已不再受支持

文章目录 前言解决方案 前言 一般来说&#xff0c;很少遇到官方网站使用Adobe Flash Player来进行录用名单公示了。但是&#xff0c;今天就偏偏遇到一次&#xff0c; 用谷歌浏览器打不开&#xff0c; 点了没有反应&#xff0c;用其他的浏览器&#xff0c;例如windows自带的那…

【方案+源码】srm供应商招投标管理系统建设方案及源码实现

SRM供应商管理系统功能建设涵盖&#xff1a; 供应商管理&#xff1a;整合供应商信息&#xff0c;实现全生命周期管理。 采购需求管理&#xff1a;精准把握采购需求&#xff0c;优化采购计划。 采购寻源管理&#xff1a;智能寻源&#xff0c;匹配最佳供应商。 采购合同管理&…

【nvm】如何使用nvm优雅的管理Node.js

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、什么是nvm?2.1 概念2.1 安装2.1.1 对于Mac系统2.1.2 对于Windows系统2.1.3 对于…

AWS云中的VPC启用流日志保存S3(AWS中国云)

问题 需要在AWS中国云中对VPC启用流日志操作。 步骤 创建s3桶 这里设置一个s3桶名&#xff0c;创建即可。如果出现已存在具有相同名称的存储桶错误&#xff0c;就换个桶名再试一试吧。 启用vpc流日志 找到vpc流日志入口操作&#xff0c;如下图&#xff1a; 设置vpc流日志…

Redis的使用和原理

目录 1.初识Redis 1.1 Redis是什么&#xff1f; 1.2 Redis的特性 1.2.1 速度快 1.2.2 基于键值对的数据结构服务器 1.2.3 丰富的功能 1.2.4 简单稳定 1.2.5 持久化 1.2.6 主从复制 1.2.7 高可用和分布式 1.3 Redis的使用场景 1.3.1 缓存 1.3.2 排行榜系统 1.3.3 计数器应用 1.3…

制定班规要注意哪些事项

对于如何管理班级&#xff0c;制定班规是一项至关重要的任务。关系到班级的日常秩序&#xff0c;影响着学生的集体荣誉感。制定班规并非易事&#xff0c;需要深思熟虑和周全考虑。 班规的制定应以学生为中心。深入了解学生的需求和期望&#xff0c;以及他们在学习和生活中可能遇…

Docker基础知识的掌握,相关基本命令的用法

安装docker步骤&#xff1a;https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d 1.docker Docker 是一种容器化平台&#xff0c;用于帮助开发者打包、发布和管理应用程序及其依赖关系。通过 Docker&#xff0c;开发者可以将应用程序及其所有依赖项打包到一个称为…

亿发微商城:从社交流量到生意增量,拓客+变现双收益

亿发微商城提供私域经营必备的系统 、服务和技术支持等全套解决方案。省去开发成本&#xff0c;还原品牌调性&#xff0c;打通社交渠道&#xff0c;经营私域会员&#xff0c;带来传统电商和线下门店之外的生意增量。

43.SO_BACKLOG

属于ServerSocketChannel参数 SO_BACKLOG 设置的过小&#xff0c;高峰期有很多连接来了&#xff0c;就会被拒绝&#xff0c;报拒绝连接错误。 控制全连接队列的大小&#xff0c;可以容下适量连接。所以SO_BACKLOG设置的要大一些。 serverBootstrap.option(ChannelOption.SO_B…

面试-javaIO机制

1.BIO BIO&#xff1a;是传统的javaIO以及部分java.net下部分接口和类。例如&#xff0c;socket,http等&#xff0c;因为网络通信同样是IO行为。传统IO基于字节流和字符流进行操作。提供了我们最熟悉的IO功能&#xff0c;譬如基于字节流的InputStream 和OutputStream.基于字符流…