格式:
try (创建流对象语句,如果多个,使用\\\';\\\'隔开) {// 读写数据} catch (IOException e) {e.printStackTrace();}
演示下:
public class TryWithResourcesDemo {public static String readLineFormFile(String path) {try (BufferedReader br = new BufferedReader(new FileReader(path))) {return br.readLine();} catch (IOException e) {e.printStackTrace();}return null;}}
两者的对比:
代码精炼,在JDK1.7之前都有finally块,如果使用一些框架可能会将finally块交由框架处理,如Spring 。JDK1.7及以后的版本只要资源类实现了AutoCloseable或Closeable程序在执行完try块后会自动close()所使用的资源无论br.readLine()是否抛出异常 。代码更完全 。在出现资源泄漏的程序中,很多情况是开发人员没有或者开发人员没有正确的关闭资源所导致的 。JDK1.7之后采用try-with-resources 的方式,则可以将资源关闭这种与业务实现没有很大直接关系的工作交给JVM 完成 。省去了部分开发中可能出现的代码风险 。以readLineFormFile方法为例,如果调用 readLine()和 close()方法都抛出异常,后一个异常就会被禁止,以保留第一个异常 。4.2 catch多种异常并抛出新的异常在JDK1.7之前catch 多个异常是这样的:try{
编写可能会出现异常的代码
}catch(异常类型A e){ 当try中出现A类型异常,就用该catch来捕获.
处理异常的代码
}catch(异常类型B e){ 当try中出现B类型异常,就用该catch来捕获.
处理异常的代码
}JDK1.7及以后可以这样:try{
编写可能会出现异常的代码
}catch (异常类型A | 异常类型B e) {
处理异常的代码
}但是呢,这个是同类型异常才可以这样定义 。5 自定义异常 5.1 为什么需要自定义异常类:
我们说了Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中,当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常 。例如年龄负数问题,考试成绩负数问题 。什么是自定义异常类呢:
在开发中根据自己业务的异常情况来自己定义异常类 。例如:登录系统中,年龄能为负数吗,不能就需要自己定义一个登录异常类 。
5.2 怎样定义自定义异常类
- 自定义一个编译期异常: 自定义类并继承于java.lang.Exception。自定义一个运行时期的异常类:自定义类并继承于java.lang.RuntimeException。
public class MyException extends Exception {public MyException(){ }public MyException(String message){super(message);}}
5.3 自定义异常的例子 需求:我们模拟登陆操作,如果用户名已存在,则抛出异常并提示:亲,该用户名已经被注册 。这个相信大家也经常见到吧 。推荐阅读
- 提莫西查拉梅为什么叫“甜茶”?
- “操”什么意思
- champion袖标有几种
- 清代小说<再生缘>陈端生原著 !谁能帮帮我,十分感谢
- 建国西路154号 问路,梅陇新村—>卢湾区业余大学
- “营改增”文化创意服务包括哪些?
- “ip电影”什么意思
- 黄渤将“佟丽娅”说成“佟娅丽”,是口误还是玩笑?
- “伯牙谓世再无知音,乃破琴绝弦,终身不复鼓。”的意思是什么
- “执念有尽,深爱无终。”这句话什么意思?