java+catch块不执行_Java的System.exit()如何与try / catch / finally块一起使用?

其他答案涵盖了如果在不抛出的情况下退出JVM时catchand finally块如何不运行,但是它们没有显示出资源的“ try-with-resources”块中会发生什么:它们是否关闭了?System.exitSecurityException

根据JLS,第14.20.3.2节:

转换的结果是将资源规范“放在” try语句内。这允许扩展try-with-resources语句的catch子句捕获由于自动初始化或关闭任何资源而导致的异常。

此外,与finally关键字的意图保持一致,到执行finally块时,所有资源都将被关闭(或试图关闭)。

也就是说,资源将close在a catch或finallyblock运行之前被d 占用。如果他们都close以某种方式ð即使catch和finally不跑?

这是一些代码,用于证明“ try-with-resources”语句中的资源也未关闭。

我使用一个简单的子类BufferedReader在调用之前打印一条语句super.close。

class TestBufferedReader extends BufferedReader {

public TestBufferedReader(Reader r) {

super(r);

}

@Override

public void close() throws IOException {

System.out.println("close!");

super.close();

}

}

然后,我建立了System.exit在try-with-resources语句中调用的测试用例。

public static void main(String[] args)

{

try (BufferedReader reader = new TestBufferedReader(new InputStreamReader(System.in)))

{

System.out.println("In try");

System.exit(0);

}

catch (Exception e)

{

System.out.println("Exception of type " + e.getClass().getName() + " caught: " + e.getMessage());

}

finally

{

System.out.println("finally!");

}

}

输出:

尝试中

因此,不仅成功,catch而且finally块不运行,close如果System.exit成功,“尝试使用资源”语句也不会获得其资源的机会。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值