JDK1.7新特性之异常

「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战」。

茫茫人海千千万万,感谢这一秒你看到这里。希望我的文章对你的有所帮助!

愿你在未来的日子,保持热爱,奔赴山海!

题记:昨天我们已经小小的总结了下异常,接下来就让我们额外的学习下JDK1.7新特性给异常带来了什么呢?走着?一起瞧瞧呗!

😛JDK1.7有关异常新特性

📤try-with-resources

Java 类库中有许多资源需要通过 close 方法进行关闭。比如 InputStream、OutputStream等。作为开发人员经常会忽略掉资源的关闭方法,导致内存泄漏。当然不是我啦!

在JDK1.7之前呢,try-catch-finally语句是确保资源会被关闭的最佳方法,就算异常或者返回也一样可以关闭资源。

  • 让我们先看看之前我们如何关闭资源吧:

    public static String readFile(String path) {
        BufferedReader br = null;
    ​
        try {
            br = new BufferedReader(new FileReader(path));
            return br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {//必须在这里关闭资源
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
    }
    复制代码

    是不是我们必须finally语句块中手动关闭资源,否则会导致资源的泄露

  • 在JDK1.7及以后的版本:

    JDK1.7 中引入了try-with-resources 语句。

    • try-with-resources 语句是一个声明一个或多个资源的try语句。try-with-resources 语句确保在语句的最后每个资源都被关闭,只要是实现了AutoCloseable接口或者是Closeable接口的对象都可以使用try-with-resources 来实现异常处理和关闭资源。
    • 实际上,在编译时也会进行转化为try-catch-finally语句。

    那我们来看看怎么使用吧:

    格式:

    try (创建流对象语句,如果多个,使用';'隔开) {
        // 读写数据
    } catch (IOException e) {
        e.printStackTrace();
    }
    复制代码

    演示下:

    /**
     * JDK1.7之后就可以使用try-with-resources,不需要
     * 我们在finally块中手动关闭资源
     */
    public class TryWithResourcesDemo {
        public static String readLineFormFile(String path) {
            try (BufferedReader br = new BufferedReader(new FileReader(path))) {
                return br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    复制代码
  • 两者的对比:

    • 代码精炼,在JDK1.7之前都有finally块,如果使用一些框架可能会将finally块交由框架处理,如Spring。JDK1.7及以后的版本只要资源类实现了AutoCloseable或Closeable程序在执行完try块后会自动close()所使用的资源无论br.readLine()是否抛出异常。
    • 代码更完全。在出现资源泄漏的程序中,很多情况是开发人员没有或者开发人员没有正确的关闭资源所导致的。JDK1.7之后采用try-with-resources 的方式,则可以将资源关闭这种与业务实现没有很大直接关系的工作交给JVM 完成。省去了部分开发中可能出现的代码风险。
    • readLineFormFile方法为例,如果调用 readLine()close()方法都抛出异常,后一个异常就会被禁止,以保留第一个异常。

🌸总结

相信各位看官都对JDK1.7对异常的支持有了些了解吧,当然还有很多的JDK1.7新特性,接下来我们将要学习JDK1.7一些新特性吧!,那我们继续期待下一章的更多的内容吧!欢迎期待下一章的到来!

让我们也一起加油吧!本人不才,如有什么缺漏、错误的地方,也欢迎各位人才大佬评论中批评指正!当然如果这篇文章确定对你有点小小帮助的话,也请亲切可爱的人才大佬们给个点赞、收藏下吧,一键三连,非常感谢!

学到这里,今天的世界打烊了,晚安!虽然这篇文章完结了,但是我还在,永不完结。我会努力保持写文章。来日方长,何惧车遥马慢!

感谢各位看到这里!愿你韶华不负,青春无悔!

\