javaSE7有关异常处理有关

今天在学习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,结果如下图所示:
javaSE7有关异常处理有关_第1张图片
很明显看以看出:在调用test方法时抛出异常,并且调用了close方法。下面我们修改代码:

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

结果如下图所示:
javaSE7有关异常处理有关_第2张图片
可以看出在调用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();
        }

就是如此简单,用竖杠分开就可以。
好了,今天就介绍到这里。

你可能感兴趣的:(java)