阿里巴巴Java开发手册-finally块必须对资源对象、流对象进行关闭操作,如果有异常也要做try-cach操作

对于JDK7及以上版本,可以使用try-with-resources方式

使用方式:

    /**
     * https://www.cnblogs.com/itZhy/p/7636615.html
     * 其实这种方式只是语法糖,反编译以后还是tryCacheThrowTest()中的代码
     * https://www.cnblogs.com/langtianya/p/5139465.html
     * Throwable#addSuppressed()作用:通常在finally中出现异常不是我们需要关注点,当一个异常被抛出的时候,
     * 可能有其他异常因为该异常而被抑制住,从而无法正常抛出,此时可以通过Throwable#addSuppressed()
     * 方法将异常记录到堆栈中,通过getSuppressed方法来获取这些异常
     */
    @Test
    public void tryWithResourceTest(){
        try (FileInputStream inputStream = new FileInputStream(new File("test"))) {
            System.out.println(inputStream.read());
        } catch (IOException e) {
            throw new RuntimeException(e.getMessage(), e);
        }
    }
    @Test
    public void tryCacheThrowTest(){
        try {
            FileInputStream inputStream = new FileInputStream(new File("test"));
            Throwable var2 = null;

            try {
                System.out.println(inputStream.read());
            } catch (Throwable var12) {
                var2 = var12;
                throw var12;
            } finally {
                if (inputStream != null) {
                    if (var2 != null) {
                        try {
                            inputStream.close();
                        } catch (Throwable var11) {
                            var2.addSuppressed(var11);
                        }
                    } else {
                        inputStream.close();
                    }
                }

            }

        } catch (IOException var14) {
            throw new RuntimeException(var14.getMessage(), var14);
        }
    }

你可能感兴趣的:(Java,#,基础,#,高级用法)