当前位置: 首页 > 面试题库 >

是否finally块总是用Java执行?

印嘉泽
2023-03-14
问题内容

考虑到此代码,我是否可以绝对确定该finally块始终执行,无论它是什么something()

try {  
    something();  
    return success;  
}  
catch (Exception e) {   
    return failure;  
}  
finally {  
    System.out.println("I don't know if this will get printed out");
}

问题答案:

是的,finally将在执行trycatch代码块后调用。

唯一finally不会被调用的时间是:

  1. 如果您调用 System.exit()
  2. 如果您调用 Runtime.getRuntime().halt(exitStatus)
  3. 如果JVM首先崩溃
  4. 如果JVM在try或catch块中达到了无限循环(或其他不间断,不终止的语句)
  5. 操作系统是否强行终止了JVM进程;例如,kill -9 在UNIX上
  6. 如果主机系统死机;例如,电源故障,硬件错误,操作系统崩溃等
  7. 如果该finally块将由守护程序线程执行并且所有其他非守护程序线程在finally调用之前退出


 类似资料:
  • 问题内容: 考虑到此代码,我是否可以绝对确定该块始终执行,无论它是什么? 问题答案: 是的,将在执行或代码块后调用。 唯一不会被调用的时间是: 如果你调用 如果你调用 如果JVM首先崩溃 如果JVM在或catch块中达到了无限循环(或其他不间断,不终止的语句) 操作系统是否强行终止了JVM进程;例如,在UNIX上 如果主机系统死机;例如,电源故障,硬件错误,操作系统崩溃等 如果该块将由守护程序线程

  • 问题内容: 是否有任何条件最终可能无法在Java中运行?谢谢。 问题答案: 注意:如果在执行try或catch代码时JVM退出,则finally块可能不会执行。同样,如果执行try或catch代码的线程被中断或杀死,即使整个应用程序继续运行,finally块也可能不会执行。 我不知道finally块无法执行任何其他方式…

  • 问题内容: 我对故障排除看起来像是非常痛苦的故障排除经验,如下所示: 该问题很难解决,因为doSomeStuff()引发了异常,这又导致doSomeOtherStuff()也引发了异常。第二个异常(由finally块引发)抛出了我的代码,但是它没有第一个异常(由doSomeStuff()引发)的句柄,这是问题的真正根源。 如果代码改为这样说,那么问题就很明显了: 所以,我的问题是这样的: 在没有任

  • 问题内容: 在Java中,是否有一种优雅的方法可以在运行finally块之前检测是否发生了异常?在处理“ close()”语句时,通常需要在finally块中进行异常处理。理想情况下,我们希望维护两个异常并向上传播它们(因为它们都可能包含有用的信息)。我能想到的唯一方法是在try- catch-finally范围之外有一个变量,以保存对引发的异常的引用。然后将“保存的”异常与在finally块中发

  • 本文向大家介绍java finally块执行时机全面分析,包括了java finally块执行时机全面分析的使用技巧和注意事项,需要的朋友参考一下 java里 finally 关键字通常与try catch块一起使用。用来在方法结束前或发生异常时做一些资源释放的操作。最近也看到网上有一些讨论try catch finally关键词执行的顺序的文章,并给出了finally块是在方法最后执行的。 这些

  • 我在玩Java的可选代码,认为它的工作原理就像一个if else块。但是在下面的代码中,即使变量不是,也会执行块的内容。有什么解释吗? 产出: