java中exit如何使用,Java的System.exit()如何与try / catch / finally块一起使用?

a7806f104b6e96ddec4a1069d68fd7e0.png

智慧大石

其他答案涵盖了如果在不抛出的情况下退出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成功,“尝试使用资源”语句也不会获得其资源的机会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值