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.mzph.cn/web/79420.shtml

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

相关文章

【JVM-GC调优】

一、预备知识 掌握GC相关的VM参数&#xff0c;会基本的空间调整掌握相关工具明白一点&#xff1a;调优跟应用、环境有关&#xff0c;没有放之四海而皆准的法则 二、调优领域 内存锁竞争cpu占用io 三、确定目标 【低延迟】&#xff1a;CMS、G1&#xff08;低延迟、高吞吐&a…

基于单片机的电子法频率计

一、电子计数法测频率原理 通过门控控制闸门开关&#xff0c;闸门时间T自己设定&#xff0c;计数器计数脉冲个数N&#xff08;也就是待测信号&#xff09;&#xff0c;N个脉冲的时间间隔为δt,倒数即为信号的频率f,由此 δtT/N fN/T——信号频率 根据公式&#xff0c;如果考虑…

【C/C++】跟我一起学_C++同步机制效率对比与优化策略

文章目录 C同步机制效率对比与优化策略1 效率对比2 核心同步机制详解与适用场景3 性能优化建议4 场景对比表5 总结 C同步机制效率对比与优化策略 多线程编程中&#xff0c;同步机制的选择直接影响程序性能与资源利用率。 主流同步方式: 互斥锁原子操作读写锁条件变量无锁数据…

判断两台设备是否在同一局域网内的具体方法

以下是判断两台设备是否在同一局域网内的具体方法&#xff1a; 1. 检查IP地址和子网掩码 操作步骤&#xff1a; Windows系统&#xff1a; 按 Win R 键&#xff0c;输入 cmd 并回车。输入 ipconfig&#xff0c;查看 IPv4 地址 和 子网掩码&#xff08;如 192.168.1.5/255.255.2…

在R语言中如何将列的名字改成别的

在 R 中&#xff0c;更改数据框&#xff08;data frame&#xff09;中列的名字可以通过多种方法实现。以下是几种常见的方法&#xff1a; 方法 1&#xff1a;使用 names() 函数 names() 函数可以获取或设置数据框的列名。 示例 假设我们有一个数据框 data&#xff1a; dat…

JUC并发编程(上)

一、JUC学习准备 核心知识点&#xff1a;进程、线程、并发&#xff08;共享模型、非共享模型&#xff09;、并行 预备知识&#xff1a; 基于JDK8,对函数式编程、lambda有一定了解 采用了slf4j打印日志 采用了lombok简化java bean编写 二、进程与线程 进程和线程概念 两者对比…

单地平面6层PCB设计实战:如何兼顾电源与信号完整性?

摘要&#xff1a;面对复杂系统&#xff08;SDRAM、WiFi、电机驱动等&#xff09;且仅有1层地平面的6层板设计挑战&#xff0c;本文从层叠规划、电源噪声抑制、高速信号处理等角度&#xff0c;总结可落地的设计技巧与避坑指南。 一、层叠设计&#xff1a;6层板如何“挤”出最优布…

spark:map 和 flatMap 的区别(Scala)

场景设定 假设有一个包含句子的 RDD&#xff1a; scala val rdd sc.parallelize(List("Hello World", "Hi Spark")) 目标是&#xff1a;将每个句子拆分成单词。 1. 用 map 的效果 代码示例 scala val resultMap rdd.map(sentence > sentence…

基于VSCode+PlatformIO环境的ESP8266的HX1838红外模块

以下是针对ESP8266开发板的红外遥控解码系统开发教程&#xff0c;基于VSCodePlatformIO环境编写 一、概述 本实验通过ESP8266开发板实现&#xff1a; 红外遥控信号解码自定义按键功能映射串口监控输出基础设备控制&#xff08;LED&#xff09; 硬件组成&#xff1a; NodeMC…

Kubernetes排错(十四):Pod状态异常排查手册

当你在凌晨三点收到告警&#xff0c;发现Pod在崩溃循环中挣扎时&#xff0c;如何快速定位问题&#xff1f;本文将为你梳理一套生产环境通用的Pod排错流程&#xff0c;并附上救火队员必备的实用命令清单&#xff01; 一、5分钟快速定位&#xff1a;四步锁定问题方向 步骤1&…

医院药品管理系统(准备工作)

准备工作 创建数据库表 搭建Springboot框架 创建工程 定位maven 其他准备工作 创建数据库表 建了九张表 搭建Springboot框架 创建工程 定位maven 把镜像改为国内的 其他准备工作 安装Lombok插件 额外添加依赖 如果添加依赖的过程中一直爆红&#xff0c;可以刷新…

SpringBoot异步处理@Async深度解析:从基础到高阶实战

一、异步编程基础概念 1.1 同步 vs 异步 特性同步异步执行方式顺序执行&#xff0c;阻塞调用非阻塞&#xff0c;调用后立即返回线程使用单线程完成所有任务多线程并行处理响应性较差&#xff0c;需等待前任务完成较好&#xff0c;可立即响应新请求复杂度简单直观较复杂&#…

简单的强化学习举例

1&#xff0c;定义奖励函数 首先&#xff0c;需要根据具体的任务需求来定义奖励函数。例如&#xff0c;对于机器人导航任务&#xff0c;可以根据机器人与目标点的距离来定义奖励函数&#xff1a; import numpy as npdef navigation_reward(robot_position, target_position):…

css背景相关

背景书写 background: url(src); // 注意&#xff1a;在写动态样式时&#xff0c;backgournd赋值格式错误&#xff0c;是不会在浏览器dom的style上显示的 // 但是可以创建不可见的img&#xff0c;预加载来提高性能背景也会加载图片资源 同img的src一样&#xff0c;background也…

opencascade.js stp vite 调试笔记

Hello, World! | Op enCascade.js cnpm install opencascade.js cnpm install vite-plugin-wasm --save-dev 当你不知道文件写哪的时候trae还是有点用的 ‘’‘ import { defineConfig } from vite; import wasm from vite-plugin-wasm; import rollupWasm from rollup/plug…

线程的一些事(2)

在java中&#xff0c;线程的终止&#xff0c;是一种“软性”操作&#xff0c;必须要对应的线程配合&#xff0c;才能把终止落实下去 然而&#xff0c;系统原生的api其实还提供了&#xff0c;强制终止线程的操作&#xff0c;无论线程执行到哪&#xff0c;都能强行把这个线程干掉…

BGP实验练习1

需求&#xff1a; 要求五台路由器的环回地址均可以相互访问 需求分析&#xff1a; 1.图中存在五个路由器 AR1、AR2、AR3、AR4、AR5&#xff0c;分属不同自治系统&#xff08;AS&#xff09;&#xff0c;AR1 在 AS 100&#xff0c;AR2 - AR4 在 AS 200&#xff0c;AR5 在 AS …

滑动窗口——将x减到0的最小操作数

题目&#xff1a; 这个题如果我们直接去思考方法是很困难的&#xff0c;因为我们不知道下一步是在数组的左还是右操作才能使其最小。正难则反&#xff0c;思考一下&#xff0c;无论是怎么样的&#xff0c;最终这个数组都会分成三个部分左中右&#xff0c;而左右的组合就是我们…

C++ RAII机制

RAII&#xff08;Resource Acquisition Is Initialization&#xff09;是一种编程范式&#xff0c;核心思想是&#xff1a;资源的生命周期与对象绑定——对象创建时获取资源&#xff0c;对象销毁时自动释放资源。这种机制通过构造函数和析构函数的配对执行&#xff0c;确保资源…

连续抵消解码器--Successive Cancellation decoder(SC 解码器)

在这里&#xff0c;我们来看一下&#xff08;Arikan&#xff0c;2009&#xff09;中提供的连续取消解码算法。 顾名思义&#xff0c;SC解码算法从u0开始按顺序解码比特。 冻结的比特节点总是被解码为0。 在解码ui时&#xff0c;根据以下规则使用由向量表示的可用比特来解码u…