Java方法包含另一个抛出异常的方法

时间:2012-02-14 10:19:24

标签: java

在方法A中,有方法B.方法B抛出异常,但方法A编译即使它没有捕获异常或抛出异常,是否可能?

方法B如下所示:

MethodB() throws SomeException{
   if(Some)
        doneSomething
        return
   else if(some)
        donesomethingElse
        return 
   throw SomeException  
}

3 个答案:

答案 0 :(得分:2)

如果SomeException延伸RuntimeException。然后即使签名看起来像你也不需要抓住它。

另请注意,您可以在这种情况下删除throws SomeException。阅读更多here

答案 1 :(得分:1)

是的,有一些未经检查的例外,可能不会被抓住/重新播放。

查看本教程 - Unchecked Exceptions

答案 2 :(得分:0)

即使SomeException是一个已检查的异常,也可能由于单独编译而发生这种情况。

假设你写了一个类:

public class B {
  public static void foo() {
  }
}

然后是一个叫它的类:

public class A {
  public static void main(String[] args) {
    B.foo();
  }
}

然后说:

javac A.java
java A

一切都很好。现在换B:

public class B {
  public static void foo() throws java.io.IOException {
    throw new java.io.IOException();
  }
}

这次只是在运行之前编译B:

javac B.java
java A

你得到:

Exception in thread "main" java.io.IOException
    at B.foo(B.java:4)
    at A.main(A.java:4)

在现实世界中,当个别.jar文件被维护者修改后更新时会发生这种情况。维护人员不了解添加更多throws子句所导致的问题。