3 回答
TA贡献2051条经验 获得超10个赞
号System.exit(0)不返回,并且不执行finally块。
System.exit(int)可以扔一个SecurityException。如果发生这种情况,将执行finally块。并且由于相同的主体从相同的代码库调用相同的方法SecurityException,因此第二次调用可能会抛出另一个。
这是第二种情况的示例:
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条经验 获得超10个赞
简单的测试,包括catch太透露,如果system.exit(0)没有抛出安全异常,这将是最后一个执行的语句(catch和finally所有不执行)。
如果system.exit(0)不抛出一个安全异常,catch和finally语句执行。如果catch和finally都包含system.exit()语句,则仅system.exit()执行这些语句之前的语句。
在上述两种情况下,如果try代码属于另一个方法调用的方法,则被调用的方法不会返回。
此处有更多详细信息(个人博客)。
添加回答
举报