我无法记住它是如何工作的。如果我有一个引发异常的方法,则可以在该方法中对其进行处理,或者声明该方法引发异常。当我在某个方法中有一个可能引发异常但未明确声明可能发生异常的方法时会发生什么?

例如:

public void A() throws Exception
{
  B();
}

public void B()
{
  //Some code in here may cause an exception.
}


当方法“ B”导致异常时会发生什么?程序崩溃了吗? “ B”是否应该在方法声明中声明“引发异常”?

最佳答案

归结为Checked Exception vs.Unchecked Exception。

未检查的异常是RuntimeException的子类。无需在方法签名中声明就可以抛出它们。如果没有被抓住,它们将被进一步推向栈顶。因此,如果B抛出未经检查的Exeption A也会抛出它。编译器不会检查是否处理了未经检查的异常,您只会在运行时看到它,因此命名为RuntimeException。

已检查的异常需要在签名中声明,并且必须进行处理,否则调用方法的方法签名必须声明已抛出异常。否则,编译器会抱怨,您将无法编译该程序。因此,如果B抛出诸如FileNotFoundException之类的CheckedException,则必须在B的签名中声明它。由于A没有抓住它,它被进一步抛出。在这种情况下,声明A引发Exception确实可行,但这是一个坏习惯。

关于java - Java异常处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6659749/

10-12 12:44
查看更多