try {
if (check) {
while (true) ;
} else {
System.exit(1);
}
} finally {
clear();
}
Q:実行されない場合はありclear()ますか?個人的にはclear()が実行されないことはないと思います。
try {
if (check) {
while (true) ;
} else {
System.exit(1);
}
} finally {
clear();
}
Q:実行されない場合はありclear()ますか?個人的にはclear()が実行されないことはないと思います。
System.exit成功した場合、clear()は実行されません。ただし、例外System.exit(1) がスローSecurityExceptionされる可能性があり、その場合clear()は実行されます。
checkが true の場合、無限ループに陥っています。この場合、技術的には finally ブロックに到達することはありません。
Elsecheckが false の場合、System.exit(1);が実行され、プログラムが終了します。その場合、finally実行するブロックに到達することはありませんclear()。
この例では、実際に到達することはできませんclear()
clear は、try ブロックが完了したときにのみ実行されます。
が true の場合check、while(true) は永遠にそこに留まるため、try ブロックを離れることはありません
checkfalse の場合はSystem.exit(0)プログラムを終了するだけなので、finally ブロックも実行されません。ただし、最終的に呼び出される原因となるSystem.exit(int)a をスローできます。SecurityException
要約すると、System.exitスローした場合に呼び出すことができると思いますSecurityException
clear() が実行されない場合はありますか?
あなたが与えた2つの例は、コードを実行することで確認できるケースです。
無限ループがある場合、その後は何も実行されません。
System.exit() が成功すると、すぐにスレッドを停止します。
System.exit(1) は、finally 句の実行を防ぎます。
基本的に、try または catch が正常に返されたか例外的に返されたかに関係なく、try/catch の後に finally ブロックが実行されます。
ただし、 System.exit は、ブロックがまったく戻るのを防ぎます。
ながら (真) ; 明らかに無期限にブロックします。while (true) ; と仮定しただけです。より意味のあるもののスタブでした:)