Java 关于最后一个街区

Java 关于最后一个街区,java,try-catch-finally,finally,try-finally,Java,Try Catch Finally,Finally,Try Finally,我知道,最后的目的是保证执行一些指令或清理代码。但是最后使用或将代码放在catch块之后的实际区别是什么。 我的意思是,给我一个例子,您需要使用finally,因为否则代码可能根本无法执行。finally块无论发生什么情况都会触发,即使您抛出并捕获。放置在不在finally块中的catch之后的代码可能不会执行,例如,如果您的catch可能导致进程结束或应用程序崩溃。finally块无论如何都会触发,即使您抛出并捕获。放置在不在finally块中的catch之后的代码可能不会执行,例如,如果ca

我知道,
最后
的目的是保证执行一些指令或清理代码。但是最后使用
或将代码放在catch块之后的实际区别是什么。

我的意思是,给我一个例子,您需要使用
finally
,因为否则代码可能根本无法执行。

finally块无论发生什么情况都会触发,即使您抛出并捕获。放置在不在finally块中的catch之后的代码可能不会执行,例如,如果您的catch可能导致进程结束或应用程序崩溃。

finally块无论如何都会触发,即使您抛出并捕获。放置在不在finally块中的catch之后的代码可能不会执行,例如,如果catch可能导致进程结束或应用程序崩溃。

无论是否引发异常,都会执行finally


您的问题是,使用
finally
和将代码放在
catch
块之后有什么区别。如果抛出异常,则不会执行
catch
块之后的代码。如果将代码放在
finally
块中,它将执行。

无论是否引发异常,都将执行
finally


您的问题是,使用
finally
和将代码放在
catch
块之后有什么区别。如果抛出异常,则不会执行
catch
块之后的代码。如果将代码放在
finally
块中,它将执行。

finally将执行catch块中发生的事件的记录。存在几个案例

catch(Exception E)
{
    ...
    throw new OtherException(BetterMessage, E);
}


因此,即使返回或抛出异常以退出Catch块,您仍将执行finally块,而try Catch之后的任何代码都将被忽略。

finally将执行Catch块中发生的事件的记录。存在几个案例

catch(Exception E)
{
    ...
    throw new OtherException(BetterMessage, E);
}


因此,即使您返回或抛出异常以退出Catch块,您仍将执行finally块,而try Catch之后的任何代码都将被忽略。

可能会发生一些您无法捕获的异常<代码>最后
块保证即使引发意外异常也能执行其中的代码。

可能会发生一些您无法捕获的异常
finally
块保证即使引发意外异常也能执行其中的代码。

无论发生什么情况,最终都会执行

一个示例

public void test() {
    try { 
       int x = 0;
       return;
    } catch(Exception ex) { 
       ex.printStackTrace();
    } finally { 
      System.out.println("Hello from finally");
    }  

    System.out.println("Hello from after catch");
}

在这种情况下,“捕获后的Hello from”将不会被打印,但“Hello from finally”将被打印。

无论发生什么情况,最终都会执行

一个示例

public void test() {
    try { 
       int x = 0;
       return;
    } catch(Exception ex) { 
       ex.printStackTrace();
    } finally { 
      System.out.println("Hello from finally");
    }  

    System.out.println("Hello from after catch");
}

在这种情况下,“捕获后的Hello from after catch”将不会被打印,但“Hello from finally”将被打印。

A
finally
块将执行,即使您抛出并没有捕获,或者捕获并重试,或者
返回
try{throw new Error();}finally{“do something”}
仍然运行finally。我可以得到这些场景的代码示例吗?即使您抛出并没有捕获,或者捕获并重试,或者
返回,也会执行
块<代码>尝试{throw new Error();}finally{“do something”}
仍然运行finally。我可以看到每个场景的代码示例吗。如果应用程序崩溃,我希望运行什么样的代码?这实际上是我最感兴趣的,我要确保在某个地方记录了一些关于坠机的信息。尝试向另一个进程发出故障警报。保存您仍然可以保存的任何用户数据。尝试重新启动应用程序。无论您想要什么-这更多的是一个架构决策;FINALLY块绝对不是必须的,因为它在上下文中肯定会有无用的时候。我明白了。如果应用程序崩溃,我希望运行什么样的代码?这实际上是我最感兴趣的,我要确保在某个地方记录了一些关于坠机的信息。尝试向另一个进程发出故障警报。保存您仍然可以保存的任何用户数据。尝试重新启动应用程序。无论您想要什么-这更多的是一个架构决策;FINALLY块绝对不是必需的,因为它在上下文中肯定会有无用的时候。也有@Petros P建议的
try{return;}…
案例和
exit()
案例。还有@Petros P建议的
try{return;}…
案例和
exit()
案例。