ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java7后try语句的优化

2019-08-11 10:51:23  阅读:219  来源: 互联网

标签:语句 OutputStream 接口 try Java7 IOException catch 异常


原始的写法

  先来看一段老代码

OutputStream out = null;
try {
   out = response.getOutputStream()
} catch (IOException e1) {
    e.printStackTrace();
}finally{
    try {
        if(out != null){
            out.close();
        }
    } catch (IOException e2) {
        e.printStackTrace();
    }
}

  这个输出流使用了try/catch/finally,写法繁琐,并且在关闭的时候也有可能会抛出异常,异常e2 会覆盖掉异常e1 。

 

优化后的写法

  Java7提供了一种try-with-resource机制,新增自动释放资源接口AutoCloseable

  在JDK7中只要实现了AutoCloseable或Closeable接口的类或接口,都可以使用try-with-resource来实现异常处理和资源关闭异常抛出顺序。异常的抛出顺序与之前的不一样,是先声明的资源后关闭。

  上例中OutputStream实现了Closeable接口,可以修改成:

try(OutputStream out = response.getOutputStream()) {
    //
} catch (IOException e) {
    e.printStackTrace();
}

//如果有多个OutputStream,可以加分号
try(OutputStream out1 = response.getOutputStream();
    OutputStream out2 = response.getOutputStream()) {
    //
} catch (IOException e) {
    e.printStackTrace();
}

   这样写还有一个好处。能获取到正确的异常,而非资源关闭时抛出的异常。

  还有一点要说明的是,catch多种异常也可以合并成一个了

catch (IOException | SQLException e) {
    e.printStackTrace();
}

try-with-resource的优点

  1、代码变得简洁可读
  2、所有的资源都托管给try-with-resource语句,能够保证所有的资源被正确关闭,再也不用担心资源关闭的问题。
  3、能获取到正确的异常,而非资源关闭时抛出的异常

 

  Closeable 接口继承了AutoCloseable 接口,都只有一个close()方法,自己新建的类也可以实现这个接口,然后使用try-with-resource机制

public interface AutoCloseable {
    void close() throws Exception;
}
public interface Closeable extends AutoCloseable {
    public void close() throws IOException;
}

标签:语句,OutputStream,接口,try,Java7,IOException,catch,异常
来源: https://www.cnblogs.com/diandianquanquan/p/11334189.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有