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 ブロックを離れることはありません
check
false の場合は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) ; と仮定しただけです。より意味のあるもののスタブでした:)