当前位置: 首页 > backend >正文

JavaSE核心知识点02面向对象编程02-08(异常处理)

🤟致敬读者

  • 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉

📘博主相关

  • 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息

文章目录

    • JavaSE核心知识点02面向对象编程02-08(异常处理)
      • **一、异常处理的核心概念**
        • **1. 什么是异常?**
        • **2. Java异常分类**
      • **二、异常处理的关键字**
        • **1. try-catch-finally**
        • **2. throws**
        • **3. throw**
      • **三、常见异常类型与处理**
        • **1. 常见异常示例**
        • **2. 处理多个异常**
      • **四、自定义异常**
        • **1. 创建自定义异常类**
        • **2. 使用自定义异常**
      • **五、最佳实践与常见陷阱**
        • **1. 最佳实践**
        • **2. 常见陷阱**
      • **六、总结与练习**
        • **1. 关键点总结**
        • **2. 练习题目**


📃文章前言

  • 🔷文章均为学习工作中整理的笔记。
  • 🔶如有错误请指正,共同学习进步。

好的!作为Java新手,掌握异常处理是编写健壮程序的关键。以下是一份详细的Java异常处理指南,包含基础概念、使用方法和实际示例:


JavaSE核心知识点02面向对象编程02-08(异常处理)

一、异常处理的核心概念

1. 什么是异常?
  • 异常(Exception):程序运行时发生的非正常情况,会中断正常的指令流。
  • 异常处理的必要性:避免程序崩溃、提供友好错误提示、确保资源正确释放。
2. Java异常分类

Java异常体系以 Throwable 为根类,分为两类:

  • Error:严重错误(如内存溢出 OutOfMemoryError),程序无法处理。
  • Exception:可处理的异常,分为两类:
    • Checked Exception(检查型异常):编译时强制检查(如 IOException)。
    • Unchecked Exception(非检查型异常):运行时异常(如 NullPointerExceptionArithmeticException)。

二、异常处理的关键字

1. try-catch-finally
try {// 可能抛出异常的代码int result = 10 / 0; // 抛出 ArithmeticException
} catch (ArithmeticException e) {// 捕获并处理异常System.out.println("除数不能为零!");
} finally {// 无论是否发生异常,都会执行的代码(常用于释放资源)System.out.println("执行finally块");
}
2. throws

声明方法可能抛出的异常,由调用者处理:

public void readFile() throws IOException {FileReader file = new FileReader("test.txt");// ...
}
3. throw

手动抛出异常对象:

if (age < 0) {throw new IllegalArgumentException("年龄不能为负数!");
}

三、常见异常类型与处理

1. 常见异常示例
异常类型触发场景处理建议
NullPointerException调用 null 对象的方法或属性检查对象是否为 null
ArrayIndexOutOfBounds访问数组越界位置检查数组索引范围
IOException文件读写失败(如文件不存在)使用 try-catchthrows
NumberFormatException字符串转换为数字失败(如 "abc"校验输入是否为有效数字
2. 处理多个异常
try {FileInputStream fis = new FileInputStream("file.txt");int data = fis.read();
} catch (FileNotFoundException e) {System.out.println("文件未找到!");
} catch (IOException e) {System.out.println("读取文件失败!");
} catch (Exception e) {// 兜底处理(不建议滥用)System.out.println("未知错误!");
}

四、自定义异常

1. 创建自定义异常类
public class InsufficientBalanceException extends Exception {public InsufficientBalanceException(String message) {super(message);}
}
2. 使用自定义异常
public void withdraw(double amount) throws InsufficientBalanceException {if (amount > balance) {throw new InsufficientBalanceException("余额不足!");}balance -= amount;
}

五、最佳实践与常见陷阱

1. 最佳实践
  • 精准捕获:避免捕获过于宽泛的异常(如直接 catch (Exception e))。
  • 资源释放:使用 try-with-resources(Java 7+)自动关闭资源:
    try (FileInputStream fis = new FileInputStream("file.txt")) {// 使用资源
    } catch (IOException e) {e.printStackTrace();
    }
    
  • 记录异常:使用日志工具(如 log4j)记录异常堆栈:
    catch (SQLException e) {logger.error("数据库操作失败", e);
    }
    
2. 常见陷阱
  • 忽略异常:空 catch 块会隐藏问题。
    // 错误示例!
    try {// 可能出错的代码
    } catch (Exception e) {// 空处理
    }
    
  • 在finally中return:可能导致异常被覆盖。
    try {// ...
    } finally {return; // 不推荐!
    }
    

六、总结与练习

1. 关键点总结
  • 分类:理解Checked vs Unchecked异常的区别。
  • 处理方式try-catchthrowsthrow的适用场景。
  • 资源管理:优先使用 try-with-resources 替代手动关闭。
2. 练习题目
  1. 编写代码读取文件内容,处理可能的 FileNotFoundException
  2. 实现一个除法方法,当除数为零时抛出 ArithmeticException
  3. 自定义一个 InvalidEmailException,并在用户输入无效邮箱时抛出。

通过实际编码练习,逐步掌握异常处理的核心技巧!遇到问题时,可查阅 Java官方文档 或调试工具(如IDE的断点功能)。


📜文末寄语

  • 🟠关注我,获取更多内容。
  • 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
  • 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
  • 🔵​加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
  • 🟣点击下方名片获取更多内容🍭🍭🍭👇

http://www.xdnf.cn/news/5457.html

相关文章:

  • 常见的会触发 Shuffle 的操作和方法
  • 时序约束高级进阶使用详解四:Set_False_Path
  • 学习黑客5 分钟小白弄懂Windows Desktop GUI
  • win10-django项目连接本地mysql
  • 系统思考:个人与团队成长
  • BGP实验练习1
  • Linux系统编程之消息队列
  • 如何重启pycharm中的项目?
  • 基于STM32单片机设计的教室节能照明系统
  • HTML5表格语法格式详解
  • 用浏览器打开pdf,如何使用划词翻译?
  • MySQL 数据操纵与数据库优化
  • tensorflow 1.x
  • 架构思维:通用架构模式_怀疑下游的设计思路与最佳实践
  • 利用“Flower”实现联邦机器学习的实战指南
  • html body 设置heigth 100%,body内元素设置margin-top出滚动条(margin 重叠问题)
  • 从零到精通:探索 GoFrame 框架的 SSE 优势与实战经验
  • 进程(沉淀中)
  • 运动员技术等级分为国际级运动健将
  • uniapp-商城-52-后台 商家信息(商家信息数据,云对象使用)
  • Java学习手册:服务注册与发现
  • 应急响应基础模拟靶机-security2
  • 咨询规划:精读53页信息化部门如何制定三年战略规划方案【附全文阅读】
  • 660先生与我——高等数学水平自测一、高等数学水平自测二
  • AugmentCode 非常昂贵的新定价
  • 第二十三节:图像金字塔- 图像金字塔应用 (图像融合)
  • 一个.Net开源的关系管理系统
  • 7系列 之 SelectIO 资源
  • Python Cookbook-7.10 在 MySQL 数据库中储存 BLOB
  • Linux网络基础 -- 局域网,广域网,网络协议,网络传输的基本流程,端口号,网络字节序