Try到底是捕获还是抛出?

Try到底是捕获还是抛出?

问题描述:

  1. 在课程4-2中,1:05的时间点老师说try抛出然后被下面的catch捕获。我觉得这样的描述与之前的说明冲突。前面说了throw才是抛出异常,抛出异常会创建异常对象并交付给运行时系统处理。try catch finally是捕获异常组合。try是执行可能产生异常的代码,catch是处理捕获的异常。所以这里说try抛出异常是否准确?如果准确为什么呢?它和throw本质上有说明区别?

  2. ”Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。“ 这我不太清楚背后实际发生的过程。我的理解是这里是指在try里出现了异常,然后这个异常如果catch声明的异常类型吻合(或为声明类型的子类)就按照catch块里的代码进行处理。但是在之前的小节里面讲过当运行时系统捕获了这个异常对象就会进入到捕获异常环节,在这个阶段当中,运行时系统就会去寻找合适的处理器。如果找到了就会抛出与异常匹配的处理器然后执行相关的处理逻辑。”这里寻找合适的处理器是不是就是和catch声明的类进行匹配的过程?处理器是指什么?处理器做的事情就是寻找异常类然后把异常类和catch声明类进行匹配吗?


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,

1.是try块中的代码抛出异常;

2.视频中描述准确,是try块中抛出异常,try块是一个整体,所以try抛出异常的描述是准确的;

3.try-catch是积极处理,在try中抛出的异常,由catch所捕获处理,而不是将异常抛给方法的调用者,而throw是消极处理,是将异常抛给方法的调用者。

当在try块中书写throw语句时,则会在try块中会抛出异常;

4.对于第二个问题的回答:

(1)同学的理解是正确的;

(2)处理器是指try后面一系列catch代码块;

(3)处理器的作用是捕获try中抛出的异常,且抛出的异常要和处理器中声明的异常所匹配。

祝学习愉快!

  • 只能卷了 提问者 #1

    小黑你好,

    那是否可以理解为只要程序运行过程中产生Exception而不是Error,就会产生异常对象,异常对象交付给运行时系统。这个产生异常对象并交给运行时系统的过程叫做抛出异常。所以无论在不在try块中,只要某行代码异常了,就会抛出。当使用了try块,但不去catch,只使用finally。虽然finally运行了,但程序依旧停止并打印错误信息,如果无视finally,此时有没有try没有区别,只要这行代码错误就会抛出异常。 是否理解正确?

    如果我现在catch了,匹配了,然后运行了catch块中的代码。那就是对原本终止程序打印错误信息这一过程作出自定义的优化。也就是让程序fail gracefully,而不是硬着陆。catch的用途就是可以让程序员自定义对异常的处理逻辑,防止程序自己终止。这时打印不打印错误信息都是次要的,如果要打印也可以在catch里printStackTrace();。重点是让程序继续运行,对吗?

    2022-09-06 18:37:38
  • 好帮手慕小黑 回复 提问者 只能卷了 #2

    同学你好,同学的理解是正确的,棒棒哒!

    祝学习愉快!

    2022-09-07 10:01:10
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师