JAVA7释放资源,释放模式-JDK7之后带资源的try构造

在一个长时间运行的程序中,如果未能关闭一个流,则可能会泄露文件句柄,网络端口和其他资源。因此在JDK6和更早的版本中,明智的做法实在

finally块中关闭流。为了得到正确的变量作用域,必须在try块之外声明流变量,但必须在try内完成初始化。在关闭流之前,需要检查流变量是否为

null。最后通常都希望忽略流关闭时出现的异常。或者最多把这些异常记录在日志中。例如:/**

* jdk7之前的流操作以及关闭关闭

*/

public void beforeSeven(){

OutputStream os = null;

try{

os = new FileOutputStream("/opt/temp/data");

//对os流的相应操作

}catch(IOException ex){

System.out.println(ex.getMessage());

}finally{

if(os!=null)

try{

os.close();

}catch(IOException e){

//忽略

}

}    }

这个技术有时会称作释放模式,者需要在垃圾回收前释放对象是很常见的。这个技术不仅仅适用于流,同时还适用于socket,通道,JDBC连接和语句中。

JDK7引入了“带资源的try'” 构造(try with resource),可以更简介的完成清理,不需要在try块之外声明流变量,完全可以在try块的一个参数列表中声明,例如:/**

* jdk7之后的流操作以及关闭

*/

public void afterSereven(){

try(OutputStream os = new FileOutputStream("/opt/temp/data")){

//处理流输出

}catch(IOException ex){

System.out.println(ex.getMessage());

}

}

代码变的如此简介。现在不再需要finally子句。Java会对try块参数表中声明的所有AutoCloseable对象自动调用close()方法。

只要对象实现了closeable接口,都可以实现try with resource构造,着包括几乎所有需要释放的对象。到目前为止,JavaMail Transport对象是目前唯一的例外。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值