私はJava初心者で、次の典型的なJavaコードがあるかどうか疑問に思っていました
public class MyApp {
public static void main(String[] args) {
try {
// do stuff
} catch {
// handle errors
} finally {
// clean up connections etc.
}
}
}
JVM は、finally ブロックが常に実行されることを保証しますか? 私がどこから来たのかを理解するために、NULL ポインターを逆参照し、その後実行するコードがない場合にクラッシュする可能性のある C/C++ プログラムに慣れています。
しかし、Java と GC/マネージ メモリ ビジネス全般を理解しているので、null ポインターの逆参照などはありません。 、またはありますか?たとえば、Pythonでは、通常、
try:
# do stuff
except AnExceptionIKnewMightHappen:
# react in an appropriate way
except:
# log that weird error I had not known could happen
そして、コードを通過せずにアプリが死ぬことは一度もありません。
もちろん、OS がなんらかの理由でプロセスを強制終了した場合 (またはプラグを抜くなど、何かがシステム全体を強制終了した場合)、Java にできることはあまりありません。また、PHP から、インタープリターが発生した後もまだそこにあったとしても、保護できないキャッチ不能なエラーを知っています (少なくとも、適切なメッセージを出力することができます)。
編集:わかりやすくするために(誰も誤解していませんでした)、最終的にバイパスされる可能性のあるコード内のものを探していたことを付け加えさせてください。System.exit を指すことは、なぜそのようなことをしたいのかわかりませんが、参考になりました。
JVMの終了はかなり明白な方法であり、私はそれを外的原因として数えます。JVM とアプリの実行中にスレッドが終了する可能性も覚えておく必要があることを指摘するメモは、非常に役に立ちました。