为什么抛出RuntimeException错误而不是IOException消息?

时间:2014-02-24 22:51:10

标签: java android ioexception runtimeexception

我从游戏书中得到了这段代码。作者解释说它会打开一个音乐文件

public Music newMusic(String filename) {
    try {
        AssetFileDescriptor assetDescriptor = assets.openFd(filename);
        return new AndroidMusic(assetDescriptor);
    } catch (IOException e) {
        throw new RuntimeException("Couldn't load music '" + filename + "'");
    }
}

方法AssetFileDescriptor.openFd(filename) throws a IOException

我的问题是:为什么我们需要抛出RuntimeException条消息而不是IOException条消息?

2 个答案:

答案 0 :(得分:3)

IOException是一个经过检查的异常,必须由抛出它的任何方法声明。取消选中RuntimeException,可以从任何方法中获取。

在RuntimeException中包装已检查的异常(如示例代码中所示)通常在无法从本地恢复已检查的异常时完成,并且认为异常可以导致程序失败。一旦检查的异常被包装在RuntimeException中,RuntimeException就会一直传播到堆栈中,如果它发生的话,无论是否存在异常声明。

答案 1 :(得分:0)

因此,您不需要将调用方法声明为捕获或抛出IOException

在某些情况下,经过检查的异常可能会很好,但不是到处都是。