我从游戏书中得到了这段代码。作者解释说它会打开一个音乐文件
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
条消息?
答案 0 :(得分:3)
IOException是一个经过检查的异常,必须由抛出它的任何方法声明。取消选中RuntimeException,可以从任何方法中获取。
在RuntimeException中包装已检查的异常(如示例代码中所示)通常在无法从本地恢复已检查的异常时完成,并且认为异常可以导致程序失败。一旦检查的异常被包装在RuntimeException中,RuntimeException就会一直传播到堆栈中,如果它发生的话,无论是否存在异常声明。
答案 1 :(得分:0)
因此,您不需要将调用方法声明为捕获或抛出IOException
。
在某些情况下,经过检查的异常可能会很好,但不是到处都是。