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
    }

}
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号