Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 利用资源进行尝试_Java_Try With Resources - Fatal编程技术网

Java 利用资源进行尝试

Java 利用资源进行尝试,java,try-with-resources,Java,Try With Resources,在“尝试资源”主题中,我遇到了一个疑问 程序代码: public class Suppressed_Exception_Eg03 { public static void main(String[] args) { try (Wolf obj = new Wolf(); Deer obj1 = new Deer();) { //Both close statements are executed .

在“尝试资源”主题中,我遇到了一个疑问

程序代码:

public class Suppressed_Exception_Eg03 
{ 
    public static void main(String[] args)
    { 
        try (Wolf obj = new Wolf(); Deer obj1 = new Deer();)
        { 
            //Both close statements are executed . 
            //Therefore , we see two closing stmts 
        } 
        catch(Exception e) 
        { 
            System.out.println(e.getMessage()); 
        } 
} 

static class Wolf implements AutoCloseable 
{ 
    @Override 
    public void close() throws Exception 
    { 
        System.out.println("Closing Wolf !"); 
        throw new RuntimeException("In Wolf !"); 
    } 
} 

static class Deer implements AutoCloseable 
{ 
    @Override 
    public void close() throws Exception 
    { 
        System.out.println("Closing Deer !"); 
        throw new RuntimeException("In Deer !"); 
    } 
} 
输出:

Closing Deer ! 
Closing Wolf ! 
In Deer ! 
疑问:我们都知道鹿类的close方法将首先关闭,然后是Wolf类。因此,Wolf类引发的异常应该抑制Deer类引发的异常。 所以,我们应该在catch块中捕获Wolf类的异常。但在这里,我们可以在输出中看到,Deer类的异常被捕获并打印出来。有人能解释这是为什么吗

规范上说:

资源的关闭顺序与初始化资源的顺序相反。 资源只有在初始化为非空值时才会关闭。关闭一个资源时出现的异常不会阻止关闭其他资源。如果初始值设定项、try块或关闭资源之前引发了异常,则会抑制此类异常


代码中的第一个异常(
Deer
)未被抑制,因为之前没有引发任何异常。然后,关闭下一个资源(
Wolf
),但这次禁止了来自
Wolf
的异常。

请通过将每个块缩进四个空格来格式化代码,确保同一块或同一块级别上的每一行缩进量与其他行完全相同。是的,这是一个挑剔的请求,但我们是志愿者,您希望努力让其他人更容易地帮助您。运行时异常会将您引导出try块。如果这是我的代码和问题,我会检查字节码。阅读文档总是很有帮助:。。。。。。。你还没有格式化你的代码。为什么?我不知道如何格式化我的帖子。在我看来,这完全没问题。嗨,David,我不知道“关闭一个资源时出现的异常不会阻止关闭其他资源。”以及“如果初始值设定项、try块或资源关闭之前引发了异常,则会抑制异常”。如果是这种情况,那么输出是正确的。谢谢你,大卫!