3 回答

TA貢獻2051條經(jīng)驗 獲得超10個贊
號System.exit(0)不返回,并且不執(zhí)行finally塊。
System.exit(int)可以扔一個SecurityException。如果發(fā)生這種情況,將執(zhí)行finally塊。并且由于相同的主體從相同的代碼庫調(diào)用相同的方法SecurityException,因此第二次調(diào)用可能會拋出另一個。
這是第二種情況的示例:
import java.security.Permission;
public class Main
{
public static void main(String... argv)
throws Exception
{
System.setSecurityManager(new SecurityManager() {
@Override
public void checkPermission(Permission perm)
{
/* Allow everything else. */
}
@Override
public void checkExit(int status)
{
/* Don't allow exit with any status code. */
throw new SecurityException();
}
});
System.err.println("I'm dying!");
try {
System.exit(0);
} finally {
System.err.println("I'm not dead yet!");
System.exit(1);
}
}
}

TA貢獻1802條經(jīng)驗 獲得超10個贊
簡單的測試,包括catch太透露,如果system.exit(0)沒有拋出安全異常,這將是最后一個執(zhí)行的語句(catch和finally所有不執(zhí)行)。
如果system.exit(0)不拋出一個安全異常,catch和finally語句執(zhí)行。如果catch和finally都包含system.exit()語句,則僅system.exit()執(zhí)行這些語句之前的語句。
在上述兩種情況下,如果try代碼屬于另一個方法調(diào)用的方法,則被調(diào)用的方法不會返回。
此處有更多詳細信息(個人博客)。
添加回答
舉報