【问题标题】:Using try-finally block inside while loop [duplicate]在while循环中使用try-finally块[重复]
【发布时间】:2018-07-18 19:35:47
【问题描述】:

当我在 while 循环中使用 finally 时,我试图了解机制。 在下面的代码中。 In finally 行打印,而不是 while 中断。我期待代码不会到达 finally 块。或者,如果它到达 finally 块,那里没有 没有中断,所以这个时间应该继续。任何人都可以解释它是如何工作的吗?

         while(true){
            System.out.println("in while");

            try{
                break;
            }finally{
                System.out.println("in finally");
            }

        }
        System.out.println("after while");

输出是

in while
in finally
after while

【问题讨论】:

    标签: java while-loop break try-finally


    【解决方案1】:

    简而言之,无论您在try 中执行什么操作以退出当前循环或函数,finally 都会被执行。这适用于任何returnbreakcontinue 以及几乎所有可以将您带到任何地方的其他东西:try(通常)只能通过finally 留下。

    但也有例外:正如 OldCurmudgeon 所说,System.exit() 确实——在成功的情况下——不会让 finally 被执行。

    【讨论】:

    • 很少有例外 - System.exit(n) 避免使用 finally。
    • @OldCurmudgeon 谢谢,不知道。
    【解决方案2】:

    虽然你break 保证在尝试执行时总是最终执行。你不能停止在 finally 中输入控件。

    https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

    finally 块总是在 try 块退出时执行。这可以确保即使发生意外异常也会执行 finally 块。但 finally 不仅仅用于异常处理——它允许程序员避免清理代码被 return、continue 或 break 意外绕过。

    这种行为是有原因的。它对我们有帮助。

    它允许程序员避免因返回、继续或中断而意外绕过清理代码。

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多