首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否仅在try-with资源代码中遇到被抑制的异常?

是否仅在try-with资源代码中遇到被抑制的异常?
EN

Stack Overflow用户
提问于 2018-10-03 14:50:25
回答 2查看 466关注 0票数 0

我正在复习OCP,我偶然发现了这个场景,但也有例外。

通常,我们会在try-with-resource中遇到被抑制的异常。如果try块和close()方法都抛出异常,则只会处理try块中的异常。在close()中抛出的异常将被禁止。

我正在尝试其他方法来遇到被抑制的异常。运行methodTwo()只会抛出NullPointerException。它将被捕获,但不会被抑制。IllegalArgumentException怎么了?

代码语言:javascript
复制
    public class Main {
       public static void main(String[] args) {
        try {
            methodTwo();
        } catch (Exception e) {
            e.printStackTrace();
            for(Throwable t : e.getSuppressed()) {
                System.out.println(t.getMessage());
            }
        }
    }


    static void methodTwo() {
        try {
            throw new IllegalArgumentException("Illegal Argument");
        } finally {
            throw new NullPointerException("Null Pointer"); 
        }
    }
  }
EN

回答 2

Stack Overflow用户

发布于 2018-10-03 15:05:23

正如注释中提到的,如果发生任何异常或返回,则最终都会执行。这是因为对文件等免费资源的保证,如果你最后没有返回或抛出新的异常,它会返回之前设置的异常或值。您也可以更改在finally块中返回的值,例如:

代码语言:javascript
复制
class A
{
    public int value; // it is not good but only for test
}

public class Tester
{
    public static void main(String[] args) {
        System.out.println(method1().value); // print 10
    }

    private static A method1() {
        A a = new A();
        try
        {
            a.value = 5;
            return a;
        } finally
        {
            a.value = 10;
        }
    }
}

你可以抛出异常,而不是抛出新的值,并返回值或丢弃的上一个异常。(但所有这些在编程设计中都不是很好)

当你处理文件时,因为在java中没有像c++那样的析构函数(虽然有,但它是不同的),所以你必须使用try finally (或者对于新的方式,使用try- with - resource )来释放从系统获得的资源。

票数 0
EN

Stack Overflow用户

发布于 2018-10-03 15:03:17

正如@polygenelubricants对here的解释

带有finally块的try语句通过首先执行try块来执行。然后有一个选择:

如果try块的执行正常完成,... ...

  • If

  • 如果try块的执行由于值V的抛出而突然完成,则try块的执行由于任何其他原因R而突然完成,则执行

  • 块。然后有一个选择:
  • 如果finally块正常完成,则由于原因S而使finally块突然完成,然后由于S原因(以及原因R为discarded).

)而突然结束语句

有关更多详细信息,请访问

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52621238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档