是不是正陷入一个try块在Java中检查异常的未经检查的异常?(Isn't an unche

2019-07-29 07:54发布

有人告诉我,在Java中,未检查异常可以在try块捕获,但如果它抓住了,是不是叫checked异常?

Answer 1:

unchecked异常是不需要在被捕获的异常try - catch块。 未选中的例外是的子类RuntimeExceptionError类。

checked异常是需要在被捕获的异常try - catch块。

检查和unchecked异常的定义可参见第11.2节:编译时检查异常的Java语言规范 :

该unchecked异常类是类RuntimeException和它的子类,类Error和它的子类。 所有其他异常类被检查的异常类。

仅仅因为一个未经检查的异常被捕获在catch块不让它检查异常-它只是意味着在未经检查的异常被抓获,并在被处理catch块。

人们可以catch一个unchecked异常,然后throw一个新的检查异常,所以任何调用在其中一个未经检查的异常可能发生,迫使调用它来处理某种异常的方法,该方法的方法。

例如,一个NumberFormatException可以处理一些不可分析时抛出StringInteger.parseInt方法是一个未经检查的异常,所以它不需要被抓获。 但是,调用该方法的方法可能需要调用程序,妥善处理这样的问题,所以它可能会引发其被选中另一个异常(不是的子类RuntimeException 。):

public int getIntegerFromInput(String s) throws BadInputException {
    int i = 0;
    try {
        i = Integer.parseInt(s);
    catch (NumberFormatException e) {
        throw new BadInputException();
    }

    return i;
}

在上面的例子,一个NumberFormatException被捕获在try - catch块,和一个新的BadInputException (其旨在是检查异常)被抛出。

任何来电者的getIntegerFromInput方法将被迫搭上BadInputException ,并不得不面对糟糕的输入。 如果NumberFormatException是不被捕获和处理,任何呼叫者这种方法必须正确处理异常。

(此外,应该注意的是,吃了一个例外,做的事情是不是真的有意义不被认为是一个很好的做法 - 处理情况可以进行有意义的异常处理例外)

从Java教程:

  • 教训:异常
    • 渔获或指定要求 -讨论检查的异常。
    • 链式例外 -捕获异常和投掷一个新的,如上面的例子中的做法。
    • unchecked异常-争


Answer 2:

不,这不叫,只是因为它是抓检查异常。 catch块可写入捕捉任何一种异常或错误的。 经过例外是那些受捕捉或指定的要求 ,这意味着你必须要么赶上他们或声明的方法可能引发它们。 你可以认为术语检查作为这意味着编译器会检查,以确保你坚持抓或指定要求的。 错误和RuntimeExceptions被称为unchecked异常,因为编译器不强制对他们的这一要求。



Answer 3:

我认为区别在于,编译器会标志未捕获的checked异常,并抛出检查异常,但没有在编译时间的方法签名声明它们的方法。

unchecked异常不需要声明或捕捉,但也被禁止。 编译器只是不将其识别为错误。



文章来源: Isn't an unchecked exception that is caught in a try block a checked exception in Java?