try-with-resources和multi-catch的使用

1.首先说一下以前开发中我们在处理异常时,我们会使用try-catch-finally来处理异常。

//使用try-catch-finally
public
static void main(String[] args) { File file = null; FileReader fr = null; try { file = new File("D://abc.txt"); fr = new FileReader(file); }catch(FileNotFoundException e){ e.printStackTrace(); }finally { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } }

通过上图的代码我们可以看到,这种处理方式使得代码过于繁琐,如果需要关闭的资源少一点还好,要是关闭超过三个,代码就会比较繁琐。

2.为了解决和优化这种问题,jdk7以后出了新的处理方式,下面我们一一介绍。

(1)使用try-with-resources 处理异常

public static void main(String[] args) {

        try(FileReader fr = new FileReader("D://abc.txt");
            BufferedReader br = new BufferedReader(fr);){
            //对文件的操作
        }
        catch(FileNotFoundException e){
            e.printStackTrace();
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }

这个try-with-resources的用法格式为:

try(  这里面的资源会自动关闭,前提是这些资源必须实现了Closeable接口或者AutoCloseable接口){

    //这里面是你的其他代码
} catch(捕获的异常){
    //打印异常信息
}   

(2)在使用try-with-resources处理异常时,我们发现里面有两个catch捕捉异常,当需要捕获异常比较多的时候,代码也会变得繁琐,

  所以我们使用multi-catch来解决和优化这种问题。

public static void main(String[] args) {

        try(FileReader fr = new FileReader("D://abc.txt");
            BufferedReader br = new BufferedReader(fr);) {
            //这里只是为了演示
            if (new Random().nextInt(10) == 0){
                throw new ClassNotFoundException();
            }
        }
        catch(IOException | ClassNotFoundException e){   //需要注意的是,这个catch里面的异常类不能存在子父类关系。如果存在子父类关系,只需捕获父类就可以了。
            e.printStackTrace();
        }
    }

 

posted @ 2020-03-20 01:02  明小天  阅读(383)  评论(0编辑  收藏  举报