在Java中处理运行时异常

20

有人能解释一下如何在Java中处理运行时异常吗?


1
我从未在任何地方看到过“接受”按钮? - RKCY
这是答案旁边的大勾 / 校正符号。 - Gordon
3
很遗憾,我有这样一种印象:对于一些愚蠢问题显而易见的30秒答案,往往比对于更有趣的问题写得好的回答能够获得更多的奖励积分。对于一些点击量较高的问题来说,第一个回答即使与问题毫不相关,也通常会获得很多奖励积分。 - jarnbjo
抱歉,我找不到任何地方。 - RKCY
@kalyaniRavi:它是答案得分下方的复选标记。 - danben
显示剩余4条评论
4个回答

38

处理它与处理常规异常没有区别:

try {
   someMethodThatThrowsRuntimeException();
} catch (RuntimeException ex) {
   // do something with the runtime exception
}

1
能捕获运行时异常吗? - RKCY
5
当然可以!Throwable的所有子类都可以被捕获。 - Carl Smotricz
我认为这个问题没有问题 - 我有一个Runnable,我怀疑它会导致运行时错误,而且我不知道你可以在任何代码中包装try/catch并添加RunTimeException catch。我谷歌搜索了“Android处理运行时异常”,这是第一个出现的问题,这个答案提供了我需要的东西。这难道不正是SO应该发挥的作用吗? - Mitch

4
如果您知道可能抛出的异常类型,可以显式地捕获它。您也可以捕获“Exception”,但这通常被认为是非常糟糕的做法,因为您将以相同的方式处理所有类型的异常。
通常情况下,RuntimeException的意义在于您无法优雅地处理它们,并且不希望在程序正常执行期间抛出它们。

除非是自定义组件因为无法访问某个主机而抛出 RuntimeException 并导致 Android 应用崩溃,否则通常不会出现这种情况。 - Alen Siljak

3
你只需要像处理其他异常一样捕获它们即可。
try {
   somethingThrowingARuntimeException()
}
catch (RuntimeException re) {
  // Do something with it. At least log it.
}

3

我不确定你是否直接指的是Java中的RuntimeException,因此我假设你在谈论运行时异常。

Java中异常处理的基本思想是将可能引发异常的代码封装在特殊语句中,如下所示。

try {
   // Do something here
}

然后,你处理异常。
catch (Exception e) {
   // Do something to gracefully fail
}

如果您需要在发生异常时执行某些操作,同时也需要在不发生异常时执行某些操作,请添加 finally
finally {
   // Clean up operation
}

所有内容看起来像这样。
try {
   // Do something here
}
catch (AnotherException ex) {
}
catch (Exception e) {  //Exception class should be at the end of catch hierarchy.
}
finally {
}

1
我们能捕获运行时异常吗?这种情况有可能吗?如果不知道运行时异常是什么,如何通过程序来捕获它呢? - RKCY
你可以使用catch (ExceptionType name) {}来捕获任何类型的异常。否则,你可以使用catch {}来捕获所有异常,或者使用catch (Exception name) {}来捕获所有异常(并且可以访问有关它们的信息)。 - Ed Altorfer
@Ed:这是正确的。但是如果服务器出现错误(加载问题),这将是运行时异常。我们如何在程序中捕获这个异常?这是否可能? - RKCY
我不知道你的意思...你可以使用我给你的语法以编程方式捕获异常。 - Ed Altorfer

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