有时可以捕获和处理错误然后为什么大多数博客声称应该处理它们并且所有错误?

时间:2014-09-24 01:47:03

标签: java error-handling

为什么大多数博客都说错误无法处理?例如,在以下代码中我已经这样做了。为什么大多数博客声称不应该处理错误?

package errors;

public class StackOverflowErrorDemo {

    public void method1() {
        this.method2();
    }

    public void method2() {
        this.method1();
    }

    public static void main(String sri[]) {
        try {
            StackOverflowErrorDemo k = new StackOverflowErrorDemo();
            k.method1();
        } catch(StackOverflowError error) {
            System.out.println(" Inside catch of stackoverflow");
        }

        System.out.println("  after error has been caught!!");
    }
}

1 个答案:

答案 0 :(得分:3)

我不确定是否对此作出回应,因为它是一个相当广泛的,开放式的问题,不太可能特别适合SO,但我会尝试限制我对您的代码的响应&# 39;已发布。

您提供的示例并非真正的特殊行为。该程序的正确行为依赖于抛出StackOverflowError。如果不抛出此错误,它将无法正常运行。您可以检测到这种错误的事实并不能证明所有错误都能以合理的方式被捕获和处理;相反,它可以证明您可以检测到发生了异常。一旦检测到这样的异常,您是否仍然可以采取合理的行动,这样您仍然可以产生正确的输出和明智的行为,这将完全取决于应用程序。

如果我理解你的说法是正确的,那么关于"大多数错误都无法处理"真的意味着,当你达到真正的错误处理"对于真正特殊的行为,你不太可能以合理的方式恢复。例如:如果您的应用程序是某种数据库驱动的应用程序并且数据库消失,那么您可以提供很少或根本没有明智的行为。同样地,如果你到达上游输入验证不足而违反程序不变量的点,那么除了放弃和错误之外,你可能做的事情可能不多。