我是一个Java的菜鸟,我想知道,如果我有以下典型的Java代码在Java中,保证被调用的“finally”块(在主要方法中)?
public class MyApp {
public static void main(String[] args) {
try {
// do stuff
} catch {
// handle errors
} finally {
// clean up connections etc.
}
}
}
并在JVM保证finally块将始终运行?为了理解我来自哪里,我习惯于C/C++程序,如果您解除引用空指针并且在此之后不能运行任何代码,那么C/C++程序可能会崩溃。
但是,据我所知,Java和整个GC /托管内存业务一般来说,没有空指针解引用这样的事情,一切都是可捕获的预期,所以没有真正的方法让我的程序崩溃,可能会使它跳过最后,还是在那里?例如,在Python中,我通常做
try:
# do stuff
except AnExceptionIKnewMightHappen:
# react in an appropriate way
except:
# log that weird error I had not known could happen
我没有任何应用程序没有通过我的代码而死亡。当然,如果操作系统出于某种原因杀死了进程(或者如果某个东西杀死了整个系统,就像拔出插件一样),那么Java可以做的事情就不多了。另外,从PHP我知道你无法防范的非可捕获错误,即使解释器在它发生后仍然存在(至少它能够输出正确的消息)。
编辑:只是为了清晰(这是不是真的被任何人误解),让我补充一点,我一直在寻找的东西我的代码内,可能导致最终被绕过。所以指向System.exit是一个有用的提示,尽管我不明白为什么我会想要这样做。
JVM退出是一种相当明显的方式,我将其视为外部原因。这个注释指出,你还必须记住在JVM和应用程序继续运行时线程退出的可能性,这是非常有用的,因为即使它现在对我来说也很明显,但我没有想到它。
啧啧,那是很快的答案。显然是一个很noob问题。不管怎么说,还是要谢谢你! – 2009-02-05 14:22:51
答案是否,详情请参阅:http://tshikatshikaaa.blogspot.nl/2012/07/about-using-systemexit-in-try-catch.html – JVerstry 2012-07-29 15:56:36