java多层catch语句_Java异常之catch语句块
今天在阅读项目代码时看到如下奇怪的代码,以为是竖线 | 可以作为多类型赋值,经过网上搜索才知道是Java SE 7新增的功能:一个catch捕获多种类型的异常。原文是Java官方的文档,现翻译如下。红字为个人备注。
public String selectByRule(String ruleId) {
try {
selectService.select(ruleId, null, false);
return "success";
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
return "failure";
}
}
catch块
我们使用一个try语句块以及紧随其后的一个或多个catch语句块来实现异常处理器。注意,在try语句块和第一个catch语句块之间不能有其他代码,示例如下。
try {
} catch (ExceptionType name) {
} catch (ExceptionType name) {
}每个catch块即是一个异常处理器,catch的参数表明了其所处理的异常的类型。示例中的参数类型ExceptionType,定义了该异常处理器可以处理的异常类型,并且参数类型ExceptionType必须是一个继承自Throwable的类的名字。 异常处理器可以通过name变量读取到所捕捉的异常。
当异常处理器被调用时,对应的catch块内的代码才会执行。那么异常处理器是何时被调用的呢?当某异常处理器的ExceptionType是调用栈上第一个匹配所抛异常的类型时,运行时系统(runtime system)就会调用该异常处理器。只要抛出的对象可以被合法地赋值给异常处理器的参数,运行时系统就会把该异常处理器当作一个匹配。也就是说父类类型如果在前面,可以屏蔽掉后面更精准的子类,如Exception可以匹配所有的异常,这样就是所谓的宽泛异常。
如下的代码片段是writeList方法的两个异常处理器:
try {
} catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
异常处理器可以做的不仅仅是打印错误消息、终止程序。此外,它们还可以进行错误恢复,提示用户做出决定,或者利用异常链把错误传递给更高层级的异常处理器,即如在异常链(
Chained Exceptions)章节中所述的。
一个异常处理器如何捕获多种类型的异常
在Java SE 7或者更高版本中,一个catach块可以处理不止一种异常类型。Java的这个功能可以减少重复代码、降低捕获过于宽泛的异常的诱惑。使用方式是,在catch语句中,指明该catch语句块可以处理的异常的类型(们),并使用竖线(|)把各个异常类型隔开,示例如下:
catch (IOException|SQLException ex) {
logger.log(ex);
throw ex;
}
注意:如果catch语句块要处理多种异常类型,那么catch的参数隐式地成为不可变(final)变量。在上例中,catch参数ex就是不可变变量,因此在该语句块内你不能赋任何值给它。
java多层catch语句_Java异常之catch语句块相关推荐
- java catch后面_java 异常被catch后 将会继续执行的操作
我就废话不多说了,大家还是直接看代码吧~ import java.util.UUID; public class Test { public static void main(String[] arg ...
- java try catch陷阱_java异常捕捉陷阱(内存泄漏,finally块,catch块,继承得到的异常)...
1. 异常捕捉的陷阱 异常处理机制是java语言的特色之一,尤其是java语言的Checked异常,更是体现了java语言的严谨性:没有完善错误处理的代码根本不会被执行.对于Checked异常, ...
- java try 返回值_JAVA的try... catch finally的return返回值问题
下面看一个例子(例1),来讲解Java里面中try.catch.finally的处理流程 public class TryCatchFinally { @SuppressWarnings(" ...
- java try的用法_Java中try()catch{}的使用方法
今天撸代码的时候发现了一段这样的代码 try( Connection conn=DriverManager.getConnection(url,user,pass); Statement stmt=c ...
- java try的用法_Java try和catch的使用
为防止和处理一个运行时错误,只需要把你所要监控的代码放进一个try块就可以了.紧跟着try块的,包括一个说明你希望捕获的错误类型的catch子句.完成这个任务很简单,下面的程序包含一个处理因为被零除而 ...
- java 异常处理的关键字_java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类...
packagecn.kecheng;importjava.util.Scanner;/**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中通过异常 ...
- java循环基础知识_Java基础知识·循环语句
掘友们,大家好呀,我是宸道. 今天要讲解的是Java基础的循环语句,虽然很基础但还是希望大家看完,就当时复习知识了,基础越牢固越好,对我们是有很大帮助的. 相关推荐 循环语句可以在满足循环条件的情况下 ...
- java catch抛出异常_java异常——捕获异常+再次抛出异常与异常链
[0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常--捕获异常+再次抛出异常与异常链 的相关知识: [1]捕获异常相关 1.1)如果 ...
- java catch自定义异常_java异常类-java自定义异常-嗨客网
Java异常类教程 我们在 我们可以看到,在 Exception 表示的是程序中出现了问题,可以直接使用 try - catch 来捕获处理.Error 一般值 Java常见异常 类名 描述 IOEx ...
最新文章
- mysql 截断表_入门MySQL——基础语句篇
- 计算机视觉深度学习顶会_顶会论文接收量再破纪录,计算机视觉创新正在发生什么变化?丨 CVPR 2019分享会...
- Python D6 if分支结构
- 数据结构之图定义及相关概念
- c++tcp接收文件缓存多大合适_linux高性能网络编程之tcp连接的内存使用
- flutter 微信语言选择_flutter实战项目,教你使用flutter打造微信app页面!
- Pyramid Stereo Matching Network
- 【链表】剑指offer:反转链表
- Git:操作报错:fatal: ‘origin‘ does not appear to be a git repository解决方案
- 从调试数据分析USB通信协议——UVC摄像头【UVC类设备】(五)
- 青蒿素发现者与两外籍科学家共获诺奖
- vue 使用pug(详细说明)
- 对前端构建工具的一些理解
- java word 替换_Java 在 Word 文档中使用新文本替换指定文本的方法
- Padavan编译技巧
- flowable工作流架构介绍及集成实现
- TCP/IP原理浅析
- Web开发了一个完整精美的聊天室(登录部分引入了Vue技术)
- mysql 热备份 数据一致性_MySQL 使用 XtraBackup 进行数据热备份指导 [全量+增量]
- 在CAD中插入谷歌地球卫星地图