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();
}
}

最新文章

  1. wx getlocation
  2. centos下ssh无密码验证
  3. Xcode 8 新特性
  4. Accessing Scoped Variables
  5. sql多表查询之一:Where 和 On的秘密
  6. 一道题看懂OC的文件管理:NSFileManager,计算文件包含内存大小
  7. 个人作业3——个人总结(Alpha阶段)
  8. 分享一个图片上传插件(TP5.0)
  9. 通过 ['1', '2', '3'].map(parseInt) 学习 map 和 parseInt 函数
  10. redis安装异常的解决的办法
  11. kaggle入门项目:Titanic存亡预测 (一)比赛简介
  12. Python爬虫基础之lxml
  13. Golang 入门系列(三)Go语言基础知识汇总
  14. jquery判断点击事件是否指定区域
  15. java和python对比----实例化的对象属性:
  16. Cisco NTP配置
  17. java并发编程——并发容器
  18. Clipboard获取内容C#
  19. C#的四个基本技巧
  20. js实现QQ、微信、新浪微博分享功能

热门文章

  1. Qlik Sense插件及QRS接口补充
  2. Hexo相关配置
  3. C语言基础-C简介
  4. pip install kaggle 出现 【网络不可达】?
  5. Serilog源码解析——使用方法
  6. 解决Affter Effect汉化版(cc2015之后的版本)中出现表达式错误的一种常用方法
  7. 【SpringCloud】07.应用间的通信
  8. 【SpringBoot】07.SpringBoot文件上传
  9. Android序列化问题与思考
  10. 为什么layui表单不显示?