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

动手动脑5

https://files.cnblogs.com/files/blogs/847696/动手动脑5.zip?t=1762256201&download=true

image
程序在第5行有一个问题:
int i=1, j=0, k;
k=i/j; // 这里会在 try-catch 块之前就抛出异常,导致程序终止
正确的异常处理流程
try 块:包含可能抛出异常的代码 k = i/j
catch 块:捕获特定类型的异常
第一个 catch 捕获 ArithmeticException(算术异常)
第二个 catch 捕获更通用的 Exception
finally 块:无论是否发生异常都会执行
异常处理基础知识总结

  1. 异常类型
    检查异常:必须处理(如 IOException)
    非检查异常:RuntimeException 及其子类(如 ArithmeticException)
  2. 异常处理机制
    try {
    // 可能抛出异常的代码
    } catch (SpecificException e) {
    // 处理特定异常
    } catch (Exception e) {
    // 处理其他异常
    } finally {
    // 无论是否异常都会执行(常用于资源清理)
    }
  3. 关键特点
    异常传播:异常会沿着调用栈向上传播
    多重 catch:从具体到一般的顺序排列
    finally 保证:即使有 return 或异常,finally 也会执行

image
image
程序执行流程:
程序进入外层 try 块。

在内层 try 块中,抛出 ArrayIndexOutOfBoundsException 异常。

该异常被内层 catch 块捕获,输出:ArrayIndexOutOfBoundsException/内层try-catch。

内层 catch 块执行完毕后,程序继续执行外层 try 块的剩余代码,抛出 ArithmeticException 异常。

该异常被外层第一个 catch 块(捕获 ArithmeticException)捕获,输出:发生ArithmeticException。

外层第二个 catch 块(捕获 ArrayIndexOutOfBoundsException)不会执行,因为异常已被内层处理且外层抛出的是 ArithmeticException。

运行结果:
text
ArrayIndexOutOfBoundsException/内层try-catch
发生ArithmeticException
说明:
代码中的字符串输出有拼写不一致(如 "ArrayList>OutOfBoundsException"),但根据实际代码逻辑,输出以代码中的字符串为准。

这是一个多层异常捕获的示例,展示了内层 catch 块处理特定异常后,外层继续处理其他异常的过程。

image
image
ArrayIndexOutOfBoundsException/外层try-catch

image
以下是代码的逐步执行过程:
进入Level 1:执行System.out.println("in Level 1")。
进入Level 2:执行System.out.println("in Level 2")。
进入Level 3:执行System.out.println("in Level 3")。
Level 3抛出异常:执行result=100/0,抛出ArithmeticException。
Level 3捕获异常:异常被Level 3的catch块捕获,输出Level 3: class java.lang.ArithmeticException。
执行Level 3的finally:无论是否发生异常,finally块都会执行,输出In Level 3 finally。
Level 2继续执行:由于Level 3的异常被内部捕获,Level 2的try块正常结束,不会触发Level 2的catch块。
执行Level 2的finally:输出In Level 2 finally。
Level 1继续执行:Level 1的try块正常结束,不会触发Level 1的catch块。
执行Level 1的finally:输出In Level 1 finally。
预期输出
根据以上分析,运行代码后的输出结果为:
in Level 1
in Level 2
in Level 3
Level 3: class java.lang.ArithmeticException
In Level 3 finally
In Level 2 finally
In Level 1 finally
关键总结
finally的执行时机:finally块总是在对应的try块退出时执行,无论是否发生异常。在嵌套结构中,finally块从内向外依次执行。
异常处理的影响:如果异常在内部被捕获(如Level 3),则外部try块不会感知异常,后续代码正常执行。如果异常未被内部捕获,它会向外传播,触发外部catch块。
不同异常抛出位置的对比(如图片中强调的):
如果异常在Level 2抛出(取消注释// result=100/0; //Level 2),则Level 3的try块不会执行,输出顺序变为:Level 1 → Level 2 → Level 2异常捕获 → Level 2 finally → Level 1 finally。
如果异常在Level 1抛出(取消注释// result = 100 / 0; //level 1),则Level 2和Level 3都不会执行,输出顺序变为:Level 1 → Level 1异常捕获 → Level 1 finally。

http://www.jsqmd.com/news/31479/

相关文章:

  • AI元人文:悟空机制与反思——论智能文明的自我超越之道
  • 从零开始搭建你的 Hexo 静态博客(支持 macOS 与 Windows)
  • cmake也是个恶大的玩意
  • 实用指南:Python 运算符与列表(list)
  • 接口请求测试题目
  • iOS - 从 @property 开始
  • ESP32 中断
  • 25.11.4随笔联考总结
  • docker 常用命令本地部署打包
  • Linux中读写自旋锁rwlock的实现 - 详解
  • 用古代数论分析电磁波频谱
  • AddressSanitizer (ASan) is a fast memory error detector
  • 「CF1210F2-Marek and Matching (hard version)」题解
  • 详细介绍:【数据结构】考研算法精讲:分块查找的深度剖析 | 从“块内无序、块间有序”思想到ASL性能最优解
  • 通过发射高能电子束来控制宇宙射线
  • ICPC2025西安 游记(VP)
  • 2025年11月汽车水泵轴承源头厂家综合评测与选择指南:徐州优力同创领跑行业
  • 各种物质的在宇宙空间中的无线电频谱分析
  • PQ v.Next 团队项目Alpha阶段分工
  • Rari黑客事件全额赔偿方案详解
  • 2025年11月圆锥滚子轴承厂家权威排行:顶尖制造商徐州优力同创服务指南
  • TOON 格式终于赢了!AI 大模型基准测试揭示惊人真相
  • 2025年11月圆锥滚子轴承厂家榜单:行业领袖深度解析与采购指南
  • Spring进阶- Spring IOC构建原理(二)IOC初始化流程
  • 2025年11月轴连轴承厂家推荐榜:行业领导者徐州优力同创解决方案解析
  • 实用指南:Linux《线程同步和互斥(下)》
  • 大模型应用开发技术路线(中):大模型微调与定制从概念到落地
  • 深入解析:搭建Jenkins gitlab 环境
  • 基于业务知识和代码库增强的大模型生成代码实践
  • 告别 “盲买”!京东 AI 试穿 Oxygen Tryon:让服饰购物从“想象”到“所见即所得”