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

JAVA_FIFTEEN_异常

目录

一、认识异常

什么是异常?

异常的体系

如何应对异常

二、自定义异常

RuntimeException 运行时异常

Exception 编译时异常

三、异常的处理

捕获异常,记录异常并响应合适的信息返回给用户

捕获异常,尝试修复


一、认识异常

什么是异常?

异常就是代表程序出现的问题

异常的体系

上图展示了Java异常的基本体系结构:

  1. 所有异常都源自Throwable类
  2. Throwable分为Error和Exception两大类
  3. Exception又分为RuntimeException(运行时异常)(如数组索引越界异常)和CheckedException(检查型异常又称为编译时异常)(日期解析时异常)
  4. 图中还列举了一些常见的具体异常类型

如何应对异常

在Java中,有几种主要的方法来应对异常:

  1. try-catch 块:用于捕获和处理可能发生的异常。
  2. throws 关键字:用于声明方法可能抛出的异常,将异常处理的责任传递给调用者。
  3. throw 关键字:用于手动抛出异常。
  4. inally 块:用于指定无论是否发生异常都要执行的代码。
  5. try-with-resources 语句:用于自动关闭实现了 AutoCloseable 接口的资源。

二、自定义异常

RuntimeException 运行时异常

定义:继承自RuntimeException的异常(如NullPointerExceptionArrayIndexOutOfBoundsException),属于非受检异常

发生时机:代码运行时才会出现(编译阶段不检查)。

常见场景:通常是代码逻辑错误导致的,

比如:

  • 访问null对象的方法(NullPointerException
  • 数组下标越界(ArrayIndexOutOfBoundsException
  • 类型转换错误(ClassCastException
  • 除以 0(ArithmeticException

Exception 编译时异常

定义:除了RuntimeException及其子类之外的Exception(如IOExceptionSQLException),属于受检异常

发生时机:编译阶段就会被检查,编译器强制要求处理,否则代码无法通过编译

使用场景:通常是外部环境导致的可预见异常

比如

  • 文件读写错误(IOException
  • 数据库连接失败(SQLException
  • 日期格式解析错误(ParseException

举例:

运行时异常和编辑时异常代码

public class Exception_Test1 {public static void main(String[] args) {//需求:保存一个合法的年龄try {savaAge(111);System.out.println("savaAge执行成功");} catch (Exception e) {e.printStackTrace(); //将错误信息打印到控制台System.out.println("savaAge出现错误");}try {savaAge2(133);System.out.println("savaAge2执行成功");} catch (AgeIllegalException e) {e.printStackTrace();System.out.println("savaAge2出现错误");}}//自定义运行时异常public static void savaAge(int age) {if (age > 0 && age < 150) {System.out.println("年龄保存成功" + age);} else {//throw 抛出去这个异常throw new AgeIllegalRuntimeException("/age is illegal your age is " + age);}}//自定义编辑时异常public static void savaAge2(int age) throws AgeIllegalException {if (age > 0 && age < 150) {System.out.println("年龄保存成功" + age);} else {//throw 抛出去这个异常throw new AgeIllegalException("/age is illegal your age is " + age);}}
}

作用:

1、异常用来检查系统是否出现Bug的关键信息

2、异常作为方法内部的一种特殊返回值,以便通知上层调用者底层的执行情况

三、异常的处理

捕获异常,记录异常并响应合适的信息返回给用户

  • 捕获异常,记录异常并响应合适的信息返回给用户

    public class Exception_Test2 {public static void main(String[] args) {try {test1();} catch (ParseException e) {System.out.println("你要解析的时间失败了!");e.printStackTrace();} catch (FileNotFoundException e) {System.out.println("你要解析的文件不存在!");e.printStackTrace();}}public static void test1() throws ParseException, FileNotFoundException {SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");Date localDate=sdf.parse("2112-12-13 11-10-32");System.out.println(localDate);test2();}public static void test2() throws FileNotFoundException {InputStream is=new FileInputStream("D:/abc.png");}
    }
    

捕获异常,尝试修复

  • 捕获异常,尝试修复

    public class ExceptionTest3 {public static void main(String[] args) {while (true) {try {System.out.println("价格合适:"+getMoney());break;} catch (Exception e) {System.out.println("请输入合法的数字!");}}}public static double getMoney(){Scanner sc=new Scanner(System.in);while (true) {System.out.println("请输入合适的价格:");double money=sc.nextDouble();if(money>0 && money<100){return money;}else {System.out.println("输入的价格不合适!");}}}
    }
    

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

相关文章:

  • 轮盘赌算法
  • CMake进阶: 检查函数/符号存在性、检查类型/关键字/表达式有效性和检查编译器特性
  • LeetCode 127:单词接龙
  • 中国开源Qwen3 Coder与Kimi K2哪个最适合编程
  • React性能优化终极指南:memo、useCallback、useMemo全解析
  • 【氮化镓】GaN取代GaAs作为空间激光无线能量传输光伏转换器材料
  • k8s下springboot-admin 监控服务部署,客户端接入
  • c++文件操作详解
  • C++ - 模板进阶
  • 浅谈生成式AI语言模型的现状与展望
  • 自然语言处理技术应用领域深度解析:从理论到实践的全面探索
  • 【STM32】CUBEMX下FreeRTOS 任务栈管理与栈溢出检测(CMSIS_V2接口)
  • 【深入探究系列(6)】算法设计:高效算法的实现与优化
  • 机器学习 KNN 算法,鸢尾花案例
  • DP4871音频放大芯片3W功率单通道AB类立体声/音频放大器
  • Python day24
  • 残月头像阁
  • Vue3中的标签 ref 与 defineExpose:模板引用与组件暴露
  • Java零基础入门学习知识点2-JDK安装配置+Maven
  • vue3 组件生命周期,watch和computed
  • 【ResNet50图像分类部署至RK3588】模型训练→转换RKNN→开发板部署
  • Agent领域,近年来的前沿研究方向:多智能体协作、认知启发架构、伦理安全、边缘计算集成
  • 《计算机组成原理与汇编语言程序设计》实验报告一 基本数字逻辑及汉字显示
  • Avalonia 发布完cv到Linux上运行 出现字体丢失/不显示问题
  • 【C++详解】模板进阶 非类型模板参数,函数模板特化,类模板全特化、偏特化,模板分离编译
  • 【第十二篇】 SpringBoot定时任务
  • 详解FreeRTOS开发过程(八)-- 时间标志
  • HyperWorks教程:HyperWorks助力精准打造游艇的设计
  • SIP广播对讲系统:构建高效智能的语音通信网络
  • 一道检验编码能力的字符串的题目