捕获异常和重新抛出

3

我是Java新手,目前正在完成指定的评估任务。我想知道是否有一种方法可以在类函数内捕获异常并抛出另一个异常,这样调用类函数的函数就不需要知道第一个抛出的异常。

例如:

public void foo() throws MasterException {
    try {
        int a = bar();
    } catch (MasterException e) {
        //do stuff
    }
}

public void bar() throws MasterException, MinorException {
    try {
        int a = 1;
    } catch (MinorException e) {
        throw new MasterException();
    }
}

我希望这个例子能够解释我想要实现的内容。基本上,我希望调用函数不需要知道关于MinorException


除此之外,您在 bar() 上保留了 throws MinorException,这似乎就是您所要求的。 - John Flatness
在bar的throws子句中不需要列出MinorException。 - Hot Licks
5个回答

3

bar的声明中的, MinorException删除即可完成。 我还会这样做:

throw new MasterException(e);

如果MasterException有一个支持它的构造函数(它通常会有,Exception类也是如此)。

谢谢,伙计。我来自C/C++背景,从未真正使用过异常。 - Benji
异常既是一种祝福,也是一种诅咒,我认为主要是一种诅咒(当它们被检查时)。理解重新抛出异常的概念似乎是“掌握”它们的好方法。 - esej
是的,我一直认为它们在C++中是一种诅咒。 - Benji
@esej:您能否解释一下为什么抓取并重新抛出异常是一件好事?希望我没有劫持原来的问题。如果是的话,请原谅。 - Victor
@Kaushik 请忽略/忘记那个。英语是我的第二语言,我试图表达的与你所读的完全不同。 - esej

1

当然可以。您想更改这一行:

public void bar() throws MasterException, MinorException

转换为:

public void bar() throws MasterException

其他所有的功能都应该按照您编写的方式正常工作。


1

只需从bar()的throws子句中删除MinorException即可。


0

我只是随口编了一些异常名称,我并没有使用这些异常,这只是一个例子。 - Benji

0
  1. 从方法 foo() 的声明中删除 throws MasterException,原因很明显,因为MasterException已经被捕获,所以不会发生。

  2. 从方法 bar() 的声明中删除 , MinorException


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接