java - finally 添加 return 隐藏异常

标签 java exception exception-handling try-catch try-catch-finally

我有以下代码

public static void nocatch()
{
    try
    {
        throw new Exception();
    }
    finally
    {

    }
}

哪个给出了错误

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Unhandled exception type CustomException

这是预期的,但是在 finally block 中添加一个 return 语句会使错误消失

public static void nocatch()
{
    try
    {
        throw new Exception();
    }
    finally
    {
        return; //makes the error go away! 
    }
}

谁能解释一下这是怎么回事?为什么错误消失了?

注意:我写这段代码纯粹是为了实验目的!

最佳答案

错误消失了,因为您的代码现在有效了。 (不好,但有效。)

如果 finally block 只有一个直接的 return; 语句,那么整个 try/catch/finally 或 try/finally 语句不能抛出任何异常 - 所以您无需声明它可以抛出异常。

在您的原始代码中,您的 try block 可能(好吧,它)抛出 Exception(或 CustomException 显然是在您的真实代码中)- 这是一个已检查的异常,这意味着您必须捕获它或声明该方法可能会抛出它。

关于java - finally 添加 return 隐藏异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28861617/

相关文章:

java - Undertow如何做Non-blocking IO?

windows - 如何从trap帧中抓取错误码?

Python 异常 : EAFP and What is Really Exceptional?

exception-handling - OCaml中的异常处理

.net - .NET 4 中的新 HandleProcessCorruptedStateExceptions 属性

java - 默认情况下,命令行 java 应用程序中未处理的异常打印在哪里?到 stdout 还是 stderr?

java - Hadoop伪分布式模式下各种守护进程的IP地址

java - 在哪里可以找到 BCEL 6.0?如何修改它并添加补丁?

java - @param Javadoc 内的代码片段

C++ 可能在 COM 方法边界处抛出代码