0

如果我调用一个方法调用另一个引发异常的方法,但这是一个 IndexOutOfBoundsException,我必须在我需要使用的每个方法中抛出这个异常,或者我可以只在第一个方法中抛出它并调用它结束。

我可以这样做吗?:

 public static void b() {
    a();
}

public static void a() throws IndexOutOfBoundsException {
}

public static void main(String[] args) {
    try {
        b();
    } catch (IndexOutOfBoundsException iEx) {
        //Manage exception
    }
}

我不想将其IndexOutOfBoundsException用作已检查的异常,因为我正在读取一个 .ini 文件以获取包含一些我需要的数据的数组,以便稍后将它们提供给数据源 (BoneCp),以管理我的连接。如果.ini 中没有包含目前所需的信息,我无法知道它,所以我不想这样处理它,(不是一个大应用程序)。但是我也想知道正常检查异常的行为是什么。

4

2 回答 2

1

IndexOutOfBounds是 a RuntimeException,这意味着它不是受检异常。所以你不需要在方法签名中声明它,我什至说你不应该(在Javadocs中提到它)。这样做使得它的检查/未检查性质有点模棱两可。由于未检查异常,因此您不需要在方法签名中声明它b。但是,如果它是已检查异常,则必须声明它。

于 2013-11-06T21:11:57.883 回答
0

我认为这里的问题是您依赖错误的异常来使程序崩溃。如果您正在读取一个文件并且您希望其中包含特定内容,您应该让您的应用程序抛出一个明确提及的错误。例如,如果您有一个解析文件的方法,您可以IndexOutOfBounds在其中捕获异常并抛出new RuntimeException("some interesting message", e);异常(其中 e 是您的 IOOB 异常)。单独的 IOOB 异常给您的用户提供了什么样的信息?

于 2013-11-06T21:31:33.527 回答