zoukankan      html  css  js  c++  java
  • 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();
            }
        }
  • 相关阅读:
    数据结构之排序七:归并排序
    数据结构之排序六:快速排序
    在MFC中显示cmd命令行
    一次性无重复配置VS项目插件属性的方法
    mysql & vs2013
    matlab 图像Mat类型矩阵中的值(uint8)类型转换,防止溢出
    利用vs10和opencv识别图片类型身份证的号码
    static
    Filter2D卷积运算
    opencv 矩阵类数据的运算
  • 原文地址:https://www.cnblogs.com/li666/p/12528874.html
Copyright © 2011-2022 走看看