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

news2024/10/7 4:30:45

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.coloradmin.cn/o/1876215.html

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

相关文章

kubuadm 方式部署 k8s 集群

准备三台机器 主机名IP地址CPU/内存角色K8S版本Docker版本k8s231192.168.99.2312C4Gmaster1.23.1720.10.24k8s232192.168.99.2322C4Gwoker1.23.1720.10.24k8s233192.168.99.2332C4Gwoker1.23.1720.10.24 需要在K8S集群各节点上面安装docker&#xff0c;如未安装则参考 …

如何3分钟上手传得神乎其神的AI绘画!一篇文章带你搞懂!

前言 今年 AI 绘画绝对是大火的概念之一&#xff0c;这次加入了生财 AI 绘画小航海的船&#xff0c;今天是体验的第1天&#xff0c;那么 AI 绘画是什么呢&#xff1f; 简单来说就是利用 AI 实现绘画&#xff0c;在特定的软件或者程序中&#xff0c;输入一定的关键词或者指令&…

springboot系列八: springboot静态资源访问,Rest风格请求处理, 接收参数相关注解

文章目录 WEB开发-静态资源访问官方文档基本介绍快速入门注意事项和细节 Rest风格请求处理基本介绍应用实例注意事项和细节思考题 接收参数相关注解基本介绍应用实例PathVariableRequestHeaderRequestParamCookieValueRequestBodyRequestAttributeSessionAttribute ⬅️ 上一篇…

数据结构复习指南

数据结构复习指南 本文中列举了数据结构期末考试可能存在的考点 绪论 数据的基本单位 数据元素是数据的基本单位 数据项 数据项是组成数据的、有独立含义的、不可分割的最小单位。 数据对象 数据对象是性质相同的数据元素的集合&#xff0c;是数据的一个子集。 数据结…

【DevExpress】WPF DevExpressMVVM 24.1版本开发指南

DevExpressMVVM WPF 环境安装 前言重要Bug&#xff08;必看&#xff09;环境安装控件目录Theme 主题LoginWindow 登陆窗口INavigationService 导航服务DockLayout Dock类型的画面布局TreeView 树状列表注意引用类型的时候ImageSource是PresentationCore程序集的博主找了好久&am…

【python】OpenCV—QR Code

文章目录 1 QR Code2 准备工作3 生成 QR 码4 读取 QR 码5 与 Zbar 比较 1 QR Code QR Code&#xff08;Quick Response Code&#xff09;是一种二维条码&#xff0c;由日本Denso-Wave公司于1994年发明。QR Code的主要特点是存储信息量大、编码范围广、容错能力强、识读速度快&…

如何让ubuntu开机自动启动DHCP呢?

在Ubuntu系统中&#xff0c;确保DHCP服务&#xff08;通常是ISC DHCP服务&#xff09;在系统启动时自动运行&#xff0c;需要进行以下几步操作&#xff1a; ### 1. 确保DHCP服务已安装 如果你还没有安装DHCP服务&#xff0c;可以使用下面的命令进行安装&#xff1a; bash sudo…

TCP:TCP连接的建立与终止

TCP连接的建立与终止 建立连接第一次握手第二次握手第三次握手 终止连接第一次挥手第二次挥手第三次挥手TIME_WAIT 状态 第四次挥手 连接建立超时 T C P是一个面向连接的协议。无论哪一方向另一方发送数据之前&#xff0c;都必须先在双方之间建立一条连接。本文将详细讨论一个T…

文心一言用户达3亿!文心大模型4.0 Turbo发布,支持API,真GPT-4 Turbo国产来了!

文心一言用户规模达到3亿了&#xff01; 这是笔者在今天的百度Wave Summit 2024大会上的看到的数字。需要强调的是&#xff0c;文心一言的用户规模是在去年12月破亿的。这意味着&#xff0c;仅仅隔了6个月&#xff0c;文心一言用户数量在亿这个级别的数字上竟然直接翻了三倍。…

2024最出色的代理软件评估及推荐

随着网络技术的飞速发展&#xff0c;代理软件已成为许多网络活动不可或缺的工具&#xff0c;特别是在数据抓取、网络安全防护等方面。在众多代理软件中&#xff0c;哪些能真正满足用户需求&#xff0c;提供卓越的性能和服务呢&#xff1f;我们的测评团队经过深入研究和测试&…

Reid系列论文学习——无人机场景下基于 Transformer 的轻量化行人重识别

今天介绍的一篇论文是针对无人机场景下的行人重识别&#xff0c;论文题目为&#xff1a;"无人机场景下基于 Transformer 的轻量化行人重识别"。该论文针对无人机场景下行人呈现多角度多尺度的特点、以及传统CNN网络在行人重识别任务中受限于感受野和下采样导致的无法…

Go-知识测试-单元测试

Go-知识测试-单元测试 1. 定义2. 使用3. testing.common 测试基础数据4. testing.TB 接口5. 单元测试的原理5.1 context 单元测试的调度5.1.1 等待并发执行 testContext.waitParallel5.1.2 并发测试结束 testContext.release 5.2 测试执行 tRunner5.3 启动测试 Run5.4 启动并发…

《晨集》开源软件平台的创新与发展

一、引言 在数字化浪潮的推动下&#xff0c;开源软件平台已成为推动软件创新、促进知识共享的重要力量。《晨集》作为新兴的开源软件平台&#xff0c;其上线标志着开源生态圈的又一重要里程碑。本文旨在探讨《晨集》开源软件平台的创新特点、对开发者社区的影响以及未来发展趋…

Flink作业执行之 4.JobGraph

Flink作业执行之 4.JobGraph 1. 入口 前文了解了由Transformation到StreamGraph的过程&#xff0c;StreamGraph即作业的逻辑拓扑结构。 生成逻辑结构后&#xff0c;接下来的操作往往是对逻辑结构的优化。在很多组件中都是这样的处理&#xff0c;如hive、spark等都会执行“逻辑…

【linux】从零到入门

linux概述 Linux是一个免费使用和自由传播的一套操作系统。用户可以无偿地得到它地源代码&#xff0c;和大量地应用程序&#xff0c;并且可以随意修改和增加它们。 Linux的内核起初由林纳斯编写。内核是啥&#xff1f; 驱动设备&#xff0c;文件系统&#xff0c;进程管理&…

『MySQL 实战 45 讲』22 - MySQL 有哪些“饮鸩止渴”提高性能的方法?

MySQL 有哪些“饮鸩止渴”提高性能的方法&#xff1f; 需求&#xff1a;业务高峰期&#xff0c;生产环境的 MySQL 压力太大&#xff0c;没法正常响应&#xff0c;需要短期内、临时性地提升一些性能 短连接风暴 短连接模式&#xff1a;执行很少的 SQL 语句就断开&#xff0c;…

【Sklearn-驯化】一文搞懂机器学习树模型建模可视化过程

【Sklearn-驯化】一文搞懂机器学习树模型建模可视化过程 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&#xff…

LeetCode刷题之HOT100之数组中的第K个最大元素

2024 6/29 今天天气很好啊&#xff0c;想爬山&#xff0c;奈何下午还有最后的一个汇报。做个题先 1、题目描述 2、算法分析 看到这个题我想到的就是: public int findKthLargest(int[] nums, int k) {Arrays.sort(nums);return nums[nums.length - k ];}哈哈&#xff0c;我提…

计算机网络 —— 基本概念

基本概念 1. 通信协议2. 面向连接 v.s. 面向无连接3. 电路交换 v.s. 分组交换4. 单工通信 v.s. 双工通信 1. 通信协议 通信协议就是计算机与计算机之间通过网络实现通信时事先达成的一种“约定”。这种“约定”使那些由不同厂商的设备、不同的CPU 以及不同的操作系统组成的计算…

记录一下MATLAB优化器出现的问题和解决

今天MATLAB优化器出了点问题。我想了想&#xff0c;决定解决一下&#xff0c;不然后面项目没有办法进行下去。 我忘了截图了。 具体来说&#xff0c;是出现了下面的问题。 Gurobi: Cplex: 在上次为了强化学习调整了Pytoch环境以后&#xff08;不知道是不是这个原因&#…