JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常
来源:互联网 发布:ipad air2 pro 知乎 编辑:程序博客网 时间:2024/05/15 11:12
在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常。如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度。下面用一个例子来理解。
Java 7之前的版本:
1
catch
(IOException ex) {
2
logger.error(ex);
3
throw
new
MyException(ex.getMessage());
4
catch
(SQLException ex) {
5
logger.error(ex);
6
throw
new
MyException(ex.getMessage());
7
}
catch
(Exception ex) {
8
logger.error(ex);
9
throw
new
MyException(ex.getMessage());
10
}
1
在Java
7
中,我们可以用一个
catch
块捕获所有这些异常:
1
catch
(IOException | SQLException | Exception ex){
2
logger.error(ex);
3
throw
new
MyException(ex.getMessage());
4
}
1
如果用一个catch块处理多个异常,可以用管道符(|)将它们分开,在这种情况下异常参数变量(ex)是定义为final的,所以不能被修改。这一特性将生成更少的字节码并减少代码冗余。
另一个升级是编译器对重新抛出异常(rethrown exceptions)的处理。这一特性允许在一个方法声明的throws从句中指定更多特定的异常类型。
让我们来看看一个小例子:
1
package
com.journaldev.util;
2
3
public
class
Java7MultipleExceptions {
4
5
public
static
void
main(String[] args) {
6
try
{
7
rethrow(
"abc"
);
8
}
catch
(FirstException | SecondException | ThirdException e){
9
//以下赋值将会在编译期抛出异常,因为e是final型的
10
//e = new Exception();
11
System.out.println(e.getMessage());
12
}
13
}
14
15
static
void
rethrow(String s)
throws
FirstException, SecondException,
16
ThirdException {
17
try
{
18
if
(s.equals(
"First"
))
19
throw
new
FirstException(
"First"
);
20
else
if
(s.equals(
"Second"
))
21
throw
new
SecondException(
"Second"
);
22
else
23
throw
new
ThirdException(
"Third"
);
24
}
catch
(Exception e) {
25
//下面的赋值没有启用重新抛出异常的类型检查功能,这是Java 7的新特性
26
// e=new ThirdException();
27
throw
e;
28
}
29
}
30
31
static
class
FirstException
extends
Exception {
32
33
public
FirstException(String msg) {
34
super
(msg);
35
}
36
}
37
38
static
class
SecondException
extends
Exception {
39
40
public
SecondException(String msg) {
41
super
(msg);
42
}
43
}
44
45
static
class
ThirdException
extends
Exception {
46
47
public
ThirdException(String msg) {
48
super
(msg);
49
}
50
}
51
52
}
1
如你所见在rethrow方法中,catch块捕获的异常并没有出现在throws从句中。Java 7编译器会分析完整的try代码块以检查从catch块中什么类型的异常被抛出和重新抛出。
需要注意一旦改变了catch块的参数,编译器的分析将不会被启用
原文链接: Journaldev 翻译: ImportNew.com - 吴际
译文链接: http://www.importnew.com/7015.html
[ 转载请保留原文出处、译者、译文链接和上面的微信二维码图片。]
- JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常
- JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常
- 在单个catch代码块中捕获多个异常
- Java SE7新特性之捕获多种类型的异常并且重新抛出使用改进的类型检查的异常
- JAVA中异常抛出、捕获机制—try catch throw
- Java中异常的捕获顺序(多个catch)
- Java中异常的捕获顺序(多个catch)
- Java SE 7新特性:同时捕获多个异常类型
- Java SE 7新特性:同时捕获多个异常类型
- 无法捕获异常:Java关于在catch中抛出一个异常给外围函数却捕获不到该异常的思考
- java try catch 吃掉异常与跑出异常的区别,以及在项目中是否改抛出异常的理解
- Java中多个异常的捕获顺序(多个catch)
- Java中多个异常的捕获顺序(多个catch)
- c# 中异常捕获catch{}常用的异常类型
- 异常-多个catch块
- C# 中异常抛出捕获机制--throw / try,catch,finally
- 捕获抛出的异常在JSP中进行显示
- java重新抛出异常
- Java Application下读取properties配置文件
- ConurrentHashMap和Hashtable的区别
- 第十四周项目5--1-字符串统计(1)
- MiniDao Framework 1.3.0 发布,J2EE持久化解决方案
- MFC 点击按钮,弹出另一个对话框
- JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常
- c++中类似于java中equals的方法
- jQuery EasyUI DataGrid Checkbox 数据设定与取值
- vs2010 MFC生成exe文件可以在无VS上运行
- VC数据库编程总结(一)
- 2012年中国最佳医院排行榜
- SVN服务器IP被修改的客户端连接解决方案
- Tomcat配置文件——server.xml(4)
- 各版本eclipse对应的egit版本下载地址