Java7 异常处理:try-with-resources 块

Java try-with-resources 块的异常处理语义与标准 Java try-catch-finally 块的异常处理语义略有不同。

在大多数情况下,更改后的语义比原始 try-catch-finally 代码块的语义更适合您,即使您并不确切了解两者的区别。即便如此,了解 try-with-resources 结构中异常处理的实际情况也不错的。因此,我将在这里解释一下 try-with-resources 结构的异常处理语义。

如果在 Java try-with-resources 块中抛出异常,在 try 块括号内打开的任何资源仍会自动关闭。异常的抛出将迫使执行离开 try 代码块,从而迫使资源自动关闭。一旦资源被关闭,从 try 代码块内部抛出的异常将在调用堆栈中向上传播。例如:

package com.hxstrive.jdk7.try_with_resources;

/**
 * JDK7 新特性 try-with-resources
 * @author hxstrive.com
 */
public class TryWithResourcesDemo4 {

    static class MyResource implements AutoCloseable {
        @Override
        public void close() throws Exception {
            // 即使 try-with-resources 代码块出现异常,这里也能执行
            System.out.println("close");
        }

        public void doSomething(String message) {
            System.out.println("doSomething() message=" + message.toUpperCase());
        }
    }

    public static void main(String[] args) throws Exception {
        try (MyResource resource = new MyResource()) {
            resource.doSomething("hello");
            resource.doSomething(null);
        }
        //结果:
        //doSomething() message=HELLO
        //close
        //Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.toUpperCase()" because "message" is null
    }

}
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号