zoukankan      html  css  js  c++  java
  • Java7新特性

    偶尔看到的一个关于 try()...catch() 的用法,通常我们使用 try...catch() 捕获异常的,如果遇到类似IO流的处理,要在finally部分关闭IO流,当然这个是JDK1.7之前的写法了;

    在JDK7优化后的 try-with-resource 语句,该语句确保了每个资源,在语句结束时关闭。

    所谓的资源是指在程序完成后,必须关闭的流对象。写在()里面的流对象对应的类都必须是Closeable的子类;

    try(Resource res = xxx){ //可指定多个资源
         //Code...
    }catch (IOException e) {
        e.printStackTrace();
    }

    try块退出时,会自动调用res.close()方法,关闭资源。

    1)JDK1.7之前

    在java7以前,程序中使用的资源需要被明确地关闭,这个体验有点繁琐。

    InputStream is = null;
    OutputStream os = null;
    try {
        //...
    } catch (IOException e) {
        //...
    }finally{
        try {
            if(os!=null)
                os.close();
            if(is!=null)
                is.close();
        } catch (IOException e2) {
            //...
        }
    }    

    如果{}中的代码块出现了异常,会被catch捕获,然后执行catch中的代码,接着执行finally中的码,其中catch中的代码有了异常才会被执行,finally中的代码无论有没有异常都会被执行。

    2)JDK1.7之后

    try-with-resource中的代码一般放的是对资源的申请,如果{}中的代码出项了异常,()中的资源就会被关闭,这在inputstream和outputstream的使用中会很方便。

    try(
        InputStream is = new FileInputStream("...");
        OutputStream os = new FileOutputStream("...");
    ){
        //...
    }catch (IOException e) {
        //...
    }

    使用TWR后可以不用在finally中释放外部资源 ,从而让代码更加优雅。

  • 相关阅读:
    BZOJ1093 [SCOI2003]字符串折叠
    BZOJ1078 [SCOI2008]斜堆
    BZOJ1089 [SCOI2003]严格n元树
    BZOJ1031 [JSOI2007]字符加密
    BZOJ1038 [ZJOI2008]瞭望塔
    BZOJ1037 [ZJOI2008]生日聚会Party
    BZOJ1041 [HAOI2008]圆上的整点
    BZOJ1026 [SCOI2009]windy数
    linux命令行计算器 <转>
    正则的[]与()
  • 原文地址:https://www.cnblogs.com/Dm920/p/12514693.html
Copyright © 2011-2022 走看看