首页 文章

是否有可能无法执行finally块?

提问于
浏览
8

我们知道无论是抛出异常,还是捕获和处理异常,finally块都会被执行,所以我很好奇有可能finally块不会被执行 .

如果在try或catch中调用System.exit(),那么finally也会被调用吗?

8 回答

  • 0

    始终执行try-catch异常块中的finally子句,而不管普通java程序流中是否发生异常 . 如果在finally子句之前停止执行流程,则不会执行finally块 .

    我们可以在最终阻止之前使用 System.exit(1); 并停止程序的执行流程 .

  • 2

    如果在执行try或catch代码时JVM退出,则finally块可能无法执行 . 同样,如果执行try或catch代码的线程被中断或终止,则即使应用程序作为一个整体继续,finally块也可能无法执行 .

    资料来源:java.sun.com: Java Tutorial: The finally Block

  • 3

    System.exit() 将阻止 finally 块执行 .

  • 21

    在Java文档中:

    http://java.sun.com/docs/books/tutorial/essential/exceptions/finally.html

    最后解释得非常好 .

    他们注意到如果JVM退出,则不会调用finally块 . 或者,如果正在运行代码块的线程被终止,则不会调用finally块 . 在所有其他情况下,它会 .

  • 3
    try {
        System.out.println("BEFORE");
        System.exit(0);
        System.out.println("AFTER");
    } finally {
        System.out.println("FINALLY");
    }
    

    这会给你输出:

    BEFORE
    
  • 1

    我现在能想到的一件事是 OutOfMemoryError ,在这种情况下,您的应用程序中可能无法执行其他代码 .

  • 0

    System.exit(1);您可以使用

  • 6

    如果某些Java Native Interface方法是segfaults(java之外的库函数但是从那里调用崩溃),也不会调用finally方法,因为整个JVM都会停止 .

    JVM本身的错误也会导致崩溃并阻止一切继续执行 .

相关问题