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

Java之异常体系

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

异常的继承体系:

Error:严重异常,内存溢出等

其他异常:编译时异常:编译阶段就要进行处理的异常(提醒程序员检查本地信息)

RuntimeException:运行时异常:编译阶段不需要处理,代码运行时出现的异常(代码出错而出现的问题)

简单理解就是编译时异常就是检查你的语法是否错误,运行时异常就是检查你的逻辑是否错误

JVM默认处理异常的方式:

1:把异常的名称,异常原因出现的位置等信息输出到控制台上

2:程序停止执行,异常下面的代码不会再执行了

自己处理异常的方式(捕获异常):

目的:当代码出现异常时,可以让程序继续往下执行

格式:

try{

可能出现异常的代码
}

这个代码会出现什么异常写到catch()里面,如果出现了处理方案是什么写在{}里面

如果出现这个异常会和catch()里面的类型进行对比,如果匹配成功则会捕捉住执行catch里面的代码

catch(异常类名+变量名){

如果出现了处理方案是什么

}

四大问:

1:如果try中没有遇到问题,怎么执行

try里面的代码全部执行完毕,catch里面的代码不会执行(出现了异常并且匹配上了才会执行这里面的代码)

2:如果try中可能会遇到多个问题,怎么执行

写多个catch进行判断,这里有一个弊端,如果这几行代码都有错误,他会只打印第一个错误,然后退出,不会在判断下面的错误

3:如果try中遇到的问题没有被捕获,怎么执行

JVM默认的运行模式

4:如果try中遇到了问题,那么try下面的其他代码还会执行吗

不会执行了,直接匹配catch里面的代码,如果匹配不上就执行jvm默认的异常

总结:try里面的代码如果没有问题则会全部执行,不会执行catch里面的代码,然后程序会继续执行 try-catch 结构之后的代码,如果有问题则会中断try里面的代码,则会匹配catch里面的代码并执行,然后程序会继续执行 try-catch 结构之后的代码,如果有问题匹配不上catch里面的代码则会JVM默认处理结束程序,不会执行 try-catch 结构之后的代码

异常中的常见方法:

getMessage:打印异常信息

toString:打印异常名字和信息

prinStackTrace:打印异常名字和异常信息和异常的地方

快捷方式:ctrl+alt+t,IDEA自动生成代码

代码解释:

  1. JVM 自动创建 ArrayIndexOutOfBoundsException 异常对象并抛出

  2. test 方法未捕获异常,异常对象沿调用栈向上传递到 main 方法。

  3. main 方法中也没有 try-catch 块处理该异常,因此异常继续向上抛出。

  4. 当异常传递到最顶层的 main 方法仍未被捕获时,JVM 接管处理

  5. 终止程序,后续代码(如果有)不会执行。

  6. 打印异常堆栈信息(包括异常类型、错误描述及调用路径)。

代码解释:

  1. JVM 自动创建 ArrayIndexOutOfBoundsException 异常对象并抛出

  2. test 方法未捕获异常,异常对象沿调用栈向上传递到 main 方法。

  3. main 方法中有try代码块并进行catch匹配捕捉,捕捉到之后执行catch里面的代码,执行完之后接着执行try-catch 结构之后的代码

代码解释:

throw是把异常返回到调用处

  1. test(s) 调用

    • test 方法接收数组 i(长度为 5),进入 if (i.length <= 5) 条件
    • 条件成立,显式创建 ArrayIndexOutOfBoundsException 对象并通过 throw 抛出
  2. 异常传递

    • throw 会立即中断 test 方法的执行,将异常对象传递到调用者 main 方法
  3. catch 块的匹配与捕获

    • main 方法中的 catch (ArrayIndexOutOfBoundsException e) 匹配该异常类型,捕获异常对象 e
  4. 后续代码执行

    • 由于异常被捕获,程序继续执行 System.out.println(Arrays.toString(s)),输出数组内容 [1, 2, 3, 4, 5]

相关文章:

  • Java Set实现类面试题
  • IP----访问服务器流程
  • 解密 Token:大模型如何解析中英文文本
  • 基于 Python 和 Django 的文本情感分析系统设计与实现
  • 音视频容器格式
  • 智能证件照处理器(深度学习)
  • IRI 2016 模型在线版 MATLAB
  • JMeter
  • Java IO 流:从入门到实践
  • 基于javaweb的SpringBoot社区维修平台设计和实现(源码+文档+部署讲解)
  • 如何用Python开发一款可以标注课标单词的工具
  • 【Windows 同时安装 MySQL5 和 MySQL8 - 详细图文教程】
  • 全面汇总windows进程通信(二)
  • 【DeepSeek与鸿蒙HarmonyOS:开启应用开发新次元】
  • 机械行业金属材料重量计算器
  • CSS实现一张简易的贺卡
  • MySQL基本查询——表的增删查改
  • python-leetcode-N 皇后
  • 【Python爬虫(61)】Python金融数据挖掘之旅:从爬取到预测
  • Python Pandas库使用指南:从入门到精通
  • 赣州网站推广/廊坊百度seo公司
  • 手机网站建设深圳/怎样推广品牌
  • wordpress ishome/网站优化推广公司排名
  • 企业局域网组建与网站建设/seo运营做什么
  • 建网络商城网站吗/网络营销公司好不好
  • 手机网站建设的第一个问题/广告推广精准引流