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

【Java回顾】Day4 异常机制

异常机制

  • 识别及响应错误,使程序中异常处理代码和正常业务代码分离。

异常层次

在这里插入图片描述

Java异常处理

  • 异常是程序中的一些错误,但并不是所有的错误都是异常。
  • 异常发生的原因|用户、程序、物理错误
    • 用户输入了非法数据。
    • 要打开的文件不存在。
    • 网络通信时连接中断,或者JVM内存溢出。

三种异常

  • 检查性异常,用户错误或问题引起的异常,异常在编译时强制要求程序员处理。
    • try{
      //可能会抛出异常的代码
      }catch(IOException e){
      //处理异常的代码
      }
      
      
  • public void readFile() throws IOException{
    //可能会抛出IOException
    }
    
  • 运行时异常 在编译时不强制要求处理,由程序中的错误引起的,例如NullPointerExcepton、ArrayIndexOut、OfBoundsException等
    • try{
      //可能会抛出异常的代码
      }catch(NullPointerException e){
      //处理异常的代码
      }
      
  • 错误:错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,他们在编译也检查不到的。

关键字和类【支持异常处理】

  • try 包裹可能会抛出异常的代码块。
  • catch 捕获异常并处理异常的代码块。
  • finally 包含无论是否发生异常都需要执行的代码块
  • throw 手动抛出异常
  • throws 在方法声明中指定方法可能抛出的异常。
  • Exception 所以异常类的父类,提供一些方法来获取异常信息,如getMessage() printStackTrace()等。

异常的捕获

  • try-catch
  • try-catch-finally
  • try-finally
  • try-with-resource

Exception类的层次

在这里插入图片描述

  • 从java.lang.Exception类继承的子类。
  • Error 用来指示运行时环境发生的错误。JAVA程序中,通常不捕获错误。

JAVA内置异常类

JAVA异常方法

略,有需要就查表

捕获异常

  • try和catch关键字可以捕获异常,称为保护代码
  • try{
    //程序代码
    }catch(ExceptionName e1)
    {
    //catch块
    }
    

多重捕获块 1个try多个catch

  • 一个try代码块后面跟随多个catch代码块的情况,匹配不同的错误类型
  • try{
       // 程序代码
    }catch(异常类型1 异常的变量名1){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }catch(异常类型3 异常的变量名3){
      // 程序代码
    }
    

throws/throw关键字

  • throw 在代码中抛出异常
  • throws 在方法声明中指定该方法可能抛出的异常。当方法内部抛出指定类型的异常时,会处理异常。
  • 一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

finally关键字

  • 无论是否发生异常,finally代码块中的代码总会被执行。在finally代码块中,可以运行清理类型等收尾善后性质的语句。
  • try{
      // 程序代码
    }catch(异常类型1 异常的变量名1){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }finally{
      // 程序代码
    }
    
  • catch不能独立于try存在,try也不能独立使用。

try-with-resources

  • 自动管理资源,确保资源在使用后能够及时关闭,避免资源泄露。
  • 自动关闭在try块中声明的资源,无需显式地在finally块中关闭。
  • try (resource declaration) {
      // 使用的资源
    } catch (ExceptionType e1) {
      // 异常块
    }
    

声明自定义异常

  • 必须是Throwable的子类
  • 检查性异常类,Exception类
  • 运行时异常类,RuntimeException类
  • class MyException extends Exception{
    }

通用异常

  • JVM(Java虚拟机)异常:JVM抛出的异常或错误
  • 程序级异常:由程序或API程序抛出的异常

八股文

  • 异常执行的顺序
    • try无异常:执行try,跳过catch,执行finally语句块和其后的语句
    • try有异常,catch没有处理此异常:抛给JVM处理,finally执行,finally之后的不执行
    • try异常,catch异常,按顺序,try-catch-finally-finally之后的语句
  • 何时finally不会执行
    • 如果try之前就return
    • System.exit(0) 是JVM提供的强制关闭虚拟机
  • finally中不要使用return的两种情况
    • catch捕获到异常,并throw给上级处理,但finally中return了,那么上级无法捕获到异常
    • 在finally里的return之前执行了其他return,最终的返回值还是finally中的return
  • 注意事项
    • 不要在finally中使用return
    • 包装异常时不要抛弃原始的异常
    • 不要使用异常控制程序的流程
    • 在finally块中清理资源或者使用try-with-resource语句
    • 优先捕获最具体的异常
    • 不要捕获Throwable类

http://www.kler.cn/a/468032.html

相关文章:

  • Spring AMQP ----注解篇
  • 【C++】P5733 【深基6.例1】自动修正
  • IoC设计模式详解:控制反转的核心思想
  • 前端工程化之手搓webpack5 --【elpis全栈项目】
  • OpenGL入门最后一章观察矩阵(照相机)
  • 『SQLite』几种向表中插入数据的方法
  • Ruby 数据类型
  • Unity 从零开始的框架搭建1-3 关于命令模式的一些思考
  • 四、VSCODE 使用GIT插件
  • 综合能源建模:理论、方法与实践
  • 行为模式3.迭代器模式
  • rsync命令常用同步方案
  • (leetcode算法题)528. 按权重随机选择
  • 记录一下core-js安装报错(core-js/modules/es.array.push.js core-js/modules/es.error.cause.js)
  • 简历_专业技能_熟悉Redis常用数据结构及其操作命令
  • 现代光学基础4
  • 如何下载 Chrome 历史版本 - 完整指南
  • SwiftUI 撸码常见错误 2 例漫谈
  • EPS32基础篇开发
  • vue 如何实现复制和粘贴操作
  • 获取钉钉微应用免登授权码(h5微应用)
  • 创建.net core 8.0项目时,有个启用原生AOT发布是什么意思
  • Oracle 创建本地用户,授予权限,创建表并插入数据
  • SQL中,# 和 $ 用于不同的占位符语法
  • 在 Python 中合并多个 Word 文档
  • spring防止重复点击,两种注解实现(AOP)