您的位置:首页 > 编程语言 > Java开发

javaSE7有关异常处理有关

2015-11-22 20:04 357 查看
今天在学习java7并发编程的时候,学到了在异常方面java7做出的改进。

首先就是多了个AutoCloaseable接口,实现该接口的类,在try代码块的特殊位置,再抛出异常时会自动关闭资源。还有就是解决没有共同父类的多个异常,但是有相同的处理方法的解决方案。下面以代码为例进行说明:

public class Main{
private static class Test implements AutoCloseable{
@override
public void close() throws Exception{
throw new Exception("throws exception");
//这里主要是为了验证在关闭时抛出异常被谁捕获而写的代码
}

public void test(){
throw new Exception("调用时出异常,看是否调用close方法!");
}
}

public static void main(String[] args){
try(Test test=new Test){
test.test();
}catch (Throwable e) {
e.printStackTrace();
}
}
}


点击Run,结果如下图所示:



很明显看以看出:在调用test方法时抛出异常,并且调用了close方法。下面我们修改代码:

public static void main(String[] args){
try{
Test test=new Test();
test.test();
}catch (Throwable e) {
e.printStackTrace();
}
}


结果如下图所示:



可以看出在调用test方法抛出异常的时候,并没有调用close方法。

java7的这一改进,解决了代码块在抛出异常时,资源没发关闭的问题。这里要是使用这一新特点,需要注意二点:

第一,你的类必须要继承AutoCloseable类。

第二,代码必须放在try后面的小括号里,而不是花括号的里面。

注意好这二点,就可以很好,很方便的运用这个新特征了。

下面说第二个问题,就是如果代码块抛出多个异常时,但是有相同的出错处理逻辑代码。当他们有共同父类的时候,我们只要catch他们的父类就可以了,写出错处理代码。但是如果他们没有共同父类的时候怎么解决呢。哈哈,java7又给了我们新的特色。瞧下面代码:

File file=new File("");
try {
file.getCanonicalFile();
} catch (IOException|SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


就是如此简单,用竖杠分开就可以。

好了,今天就介绍到这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: