我正在攻读Java程序员认证(SCJP)考试。关于异常的问题,当处理异常时最好处理特定异常,如NumberFormatException
或捕获所有异常,使用父Exception
class
?
根据我的课程,未经检查的异常基本上是RunTimeException
,这主要是程序错误造成的。这是否意味着当我手动抛出异常时,我应该使用:
new Exception("... my message...")
并且我不应该处理RunTimeException
?
只处理检查过的异常?
答案 0 :(得分:2)
您应该尽可能地处理特定的Exception
。如果你知道什么时候可能会抛出RuntimeException
,你通常应该修改你的程序,这样它就不会抛出Exception
。
就检查Exceptions
而言,您应该尽可能地处理Exception
:
try {
} catch (FileNotFoundException fnfe){
} catch (IOException ioe){
} catch (Exception e){
}
当您投掷Exceptions
时,您几乎不应该使用throw new Exception()
。
抛出一个异常,可以给看到它的人一些关于抛出时发生的事情的更多信息。 (即IndexOutOfBounds
或NullPointerExceptions
。即使查看邮件或堆栈跟踪,它们也会提供具体信息。)
如果你想抛出一个Exception
,并且你认为Java API没有一个适合你的情况,那么最好是对它进行子类化或扩展,为它提供一个信息非常丰富的名称。
答案 1 :(得分:0)
在这些情况下,您可以继承Exception
(而不是RuntimeException
)。