gpt4 book ai didi

java - 让异常在调用堆栈中向上移动有什么值(value)?

转载 作者:行者123 更新时间:2023-12-03 02:58:28 25 4
gpt4 key购买 nike

我只是reading about try-catch blocks和异常处理,我在“传播 IOExceptions”部分读到了一些让我有点困惑的内容。 Jenkov 说,如果方法 C 抛出 IOException - public void MethC() throws IOException{} - 但没有 try-catch 来处理处理它,它会将调用堆栈汇总到可能有一个 try-catch 来处理异常的调用方法

try-catch-finally block 的全部意义似乎是处理异常,如果未处理,该异常会导致程序崩溃,对吧?那么,为什么要让异常将调用堆栈回滚到链上某个位置的 try-catch 呢?有什么值(value)?如果有什么不同的话,在我看来,让异常滚动链,而不是立即处理它只会损害程序并且是糟糕的形式并导致效率低下或效率低下。

最佳答案

The whole point of a try-catch-finally block seems to be to handle an exception that would, unhandled, crash your program right?

不完全是。异常并不总是导致程序崩溃,它可能“只是”导致程序的某些部分无法正常工作。确实,try-catch-finally用于处理异常。

Why let the exception roll back up the call stack to a try-catch somewhere up the chain? What is the value?

因为有时发生异常的方法并不适合决定如何处理它。

我举一个例子:看看方法Integer.parseInt(String s),它接受一个String并尝试将其转换为 int 根据其内容。由于这是在运行时完成的,并且您无法提前知道该字符串是什么,因此您必须考虑该字符串不会是数字,例如,如果它来自用户输入。如果它不是可解析的字符串,您希望该方法如何处理它?为什么它应该决定它不适合执行的操作的结果?

这就是该方法抛出 NumberFormatException - if the string does not contain a parsable integer 的原因。调用该方法的人都可以决定应该做什么,因为该方法仅专用于将字符串转换为数字。它可以请求一个新字符串,因为最后一个字符串无效,或者只是使用默认数字作为一种占位符。

现实生活中的类比:老板告诉他的秘书在给定的日期安排与员工的 session ,秘书发现该员工在该日期正在休假。秘书应该亲自处理这种情况吗?可能不会。相反,他们会按照“InvalidMeetingTime”的方式向老板“抛出异常”,并让老板决定要做什么。

It seems to me that letting the exception roll up the chain, instead of handling it right away would just compromise the program and be bad form and cause inefficiencies or be inefficient.

这就是为什么调用范围有责任正确委托(delegate)事件。要么自己处理它,要么向上传递它,直到有东西处理它。

查看更多信息 Lesson: Exceptions .

关于java - 让异常在调用堆栈中向上移动有什么值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com