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();
        }
    }
try-with-resources和multi-catch的使用的更多相关文章
- spring-data-redis的事务操作深度解析--原来客户端库还可以攒够了事务命令再发?
		
一.官方文档 简单介绍下redis的几个事务命令: redis事务四大指令: MULTI.EXEC.DISCARD.WATCH. 这四个指令构成了redis事务处理的基础. 1.MULTI用来组装一个 ...
 - 【译】Core Java Questions and Answers【1-33】
		
前言 译文链接:http://www.journaldev.com/2366/core-java-interview-questions-and-answers Java 8有哪些重要的特性 Java ...
 - Mybatis配置一对多的关联关系(五)
		
问题:是查询一个部门中的员工? 一.web项目构架 二.lib文件的jar 三.配置大小配置和该工具类 1大配置mybatis-config.xml <?xml version="1. ...
 - Mybatis框架的模糊查询(多种写法)、删除、添加(四)
		
学习Mybatis这么多天,那么我给大家分享一下我的学习成果.从最基础的开始配置. 一.创建一个web项目,看一下项目架构 二.说道项目就会想到需要什么jar 三.就是准备大配置链接Orcl数据库 & ...
 - Mybatis的基本操作案列增加以及源码的分析(二)
		
一.构建一个框架的项目的思路 首先我们先建立一个web项目,我们需要jar,mybatis-config.xml和studentDao.xml的配置随后就是dao.daoimpl.entity.的架构 ...
 - 2MyBatis入门--深入浅出MyBatis技术原理与实践(笔记)
		
什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...
 - IDEA构建一个mybatis项目
		
目录结构如下: 在pom.xml中配置需要的jar包 <dependencies> <dependency> <groupId>org.mybatis</gr ...
 - JAVA中使用DOM解析XML文件
		
XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...
 - MyBatis的经典案例
		
1.首先我们先了解Mybatis的一些jar包 ---和项目框架 2.接下来就看看mybatis的配置文件(mybatis-config.xml) <?xml version="1.0 ...
 - mybatis中的查询缓存
		
一: 查询缓存 Mybatis提供查询缓存,用于减轻数据压力,提高数据库压力. Mybatis提供一级缓存和二级缓存. 在操作数据库时需要构造SqlSession对象,在对象中有一个数据结构(Hash ...
 
随机推荐
- 简简单单入个Redis的门
			
Redis介绍 Redis是一种key-value的存储系统,它是一种nosql(Not Only [SQL])非关系型的数据库,它支持string(字符串).list(链表).set(集合).has ...
 - 10 张图打开 CPU 缓存一致性的大门
			
前言 直接上,不多 BB 了. 正文 CPU Cache 的数据写入 随着时间的推移,CPU 和内存的访问性能相差越来越大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU Cac ...
 - OpenCascade拓扑对象之:TopoDS_Shape的三要素
			
@font-face { font-family: "Times New Roman" } @font-face { font-family: "宋体" } @ ...
 - 基于PHP实现短信验证码接口的方法
			
步骤: 1.登录荣联运通讯注册获取ACCOUNT SID.AUTH TOKEN.Rest URL(生产).AppID(默认): 2.注册测试用手机号码(先注册测试号码方可使用): 3.下载demo示例 ...
 - 计算机网络:TCP协议建立连接的过程为什么是三次握手而不是两次?【对于网上的两种说法我的思考】
			
网上关于这个问题吵得很凶,但是仔细看过之后我更偏向认为两种说的是一样的. 首先我们来看看 TCP 协议的三次握手过程 如上图所示: 解释一下里面的英文: 里面起到作用的一些标志位就是TCP报文首部里的 ...
 - POJ2430 Lazy Cows
			
题意描述 Lazy Cows 给定一个 \(2\times b\) 的矩形,和 \(n\) 个矩形上的点. 要求你用 \(k\) 个矩形覆盖这 \(n\) 个点,使得每个点都被覆盖的前提下这些矩形的面 ...
 - 记录电子竞技游戏jesp中的传输过程公式
			
1.json数据转换成字典 dict1 = json.load(load_f1) dict2 = json.load(load_f2) 2.将两个字典按key排好序,然后使用zip()函数将两个字典对 ...
 - 错误解析:org.apache.catalina.LifecycleException: Protocol handler start failed
			
以下是报错代码: org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catalin ...
 - js 元素添加多个监听
			
function addListener(element,e,fn){ if(element.addEventListener){ element.addEventListen ...
 - ubuntu18.04 安装RabbitVCS
			
因为仓库安装一直安装不上所以手动安装 第一步:下载 https://github.com/rabbitvcs/rabbitvcs/ 安装 解压安装 python setup.py install -- ...