Java 为什么抛出RuntimeException错误而不是IOException消息?
我从一本游戏书上得到这段代码。作者解释说,它将打开一个音乐文件Java 为什么抛出RuntimeException错误而不是IOException消息?,java,android,ioexception,runtimeexception,Java,Android,Ioexception,Runtimeexception,我从一本游戏书上得到这段代码。作者解释说,它将打开一个音乐文件 public Music newMusic(String filename) { try { AssetFileDescriptor assetDescriptor = assets.openFd(filename); return new AndroidMusic(assetDescriptor); } catch (IOException e) { throw ne
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(文件名)抛出IOException
我的问题是:为什么我们需要抛出一个
RuntimeException
消息而不是IOException
消息?因此您不需要将调用方法声明为捕获或抛出IOException
选中的异常在某些情况下可能很好,但不是在所有情况下都很好。因此您不需要将调用方法声明为捕获或抛出
IOException
选中的异常在某些情况下可能很好,但不是在所有情况下都很好。IOException是选中的异常,必须由抛出它的任何方法声明。RuntimeException是未选中的,可以从任何方法中删除
在RuntimeException中包装选中的异常(如示例代码中所示)通常是在无法从本地恢复选中的异常并且认为异常导致程序失败是可以接受的情况下完成的。一旦选中的异常被包装到RuntimeException中,RuntimeException就可以一直向上传播,如果它发生了,不管是否存在异常声明。IOException是选中的异常,必须由抛出它的任何方法声明。RuntimeException是未选中的,可以从任何方法中删除
在RuntimeException中包装选中的异常(如示例代码中所示)通常是在无法从本地恢复选中的异常并且认为异常导致程序失败是可以接受的情况下完成的。一旦选中的异常被包装到RuntimeException中,RuntimeException就可以一直传播到堆栈上,如果它发生的话,不管是否存在异常声明。我看到的主要缺点是,由于IOException是选中的异常,而且该方法没有处理它,方法头必须有
抛出IOException
。指出的原因是使用IOException会使“调用代码”混乱不堪。我不明白我能看到的主要缺点是,由于IOException是一个已检查的异常,而且该方法没有处理它,因此该方法头必须具有抛出IOException
。指出的原因是使用IOException会使“调用代码”相当混乱。我不明白,解释检查异常和未检查异常之间的区别可能也很有趣。我知道这一点。但作者解释说,即使对IOException使用try-catch,也最好将其作为RuntimeException重新调用。所指出的原因是使用IOException会使“调用代码相当混乱”。我不明白这一点。@HellonCanellaMachado宣布要抛出并捕获所有异常是很吵闹的;它偏离了代码实际要做的事情。请注意,大多数其他语言甚至没有检查异常;一些人认为这是一个失败的实验。在很多情况下,检查异常的语法开销是不值得的。我会考虑的。解释检查异常和未检查异常之间的区别可能也很有趣。我知道这一点。但作者解释说,即使对IOException使用try-catch,也最好将其作为RuntimeException重新调用。所指出的原因是使用IOException会使“调用代码相当混乱”。我不明白这一点。@HellonCanellaMachado宣布要抛出并捕获所有异常是很吵闹的;它偏离了代码实际要做的事情。请注意,大多数其他语言甚至没有检查异常;一些人认为这是一个失败的实验。在很多情况下,检查异常的语法开销是不值得的。我会考虑的。不过,这远远超出了可恢复性。不过,这远远超出了可恢复性。