我是Java新手,我想知道我是否具有以下典型的Java代码
public class MyApp {
public static void main(String[] args) {
try {
// do stuff
} catch {
// handle errors
} finally {
// clean up connections etc.
}
}
}
JVM是否保证将始终运行finally块?为了了解我的来历,我已经习惯了C / C
++程序,如果您取消引用NULL指针,并且之后没有任何代码可以运行,它们可能会崩溃。
但是,据我了解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和应用程序保持运行时退出线程的可能性非常有帮助,因为即使现在看来对我来说也很明显,但我没有想到这一点。