使用java中的接口和类处理异常

时间:2014-09-24 22:16:40

标签: java exception

所以请看下面的场景。我有两组类和接口。 ClassAClassBClassAInterfaceClassBInterfaceClassA在其多种方法中使用ClassB。 ClassB中的这些方法偶尔会抛出异常。

public class ClassA implements ClassAInterface {
   public void example() {
      ClassB test = new ClassB();
      ClassB.exampleTest();

      //more code using ClassB 
   }
}

public class ClassB implements ClassBInterface {
   public void exampleTest() throws ExampleException() {
      boolean tru = false;
      if (tru) {
         throw new ExampleException();
      }
   }
}

所以我遇到的问题是我在Unhandled Exception type ExampleException()方法中遇到ClassA.example()错误。为什么会这样?我希望ClassB方法在特定情况下抛出异常,并表示它有时会抛出throws ExampleException()的异常,为什么ClassA不能编译。要解决此问题,我无法在ClassA.example()上添加throws语句,因为它会违反ClassAInterface。如果我只是将ClassB.exampleTest()包装在try catch语句中,那么ClassA.example()的其余部分会抛出错误,因为ClassB表示出错了,你应该在那一点抛出异常,抛出异常的全部意义。所以我不确定为什么会这样或者如何解决它。

1 个答案:

答案 0 :(得分:2)

为什么代码拒绝编译?

这很正常。如你所说,B.exampleTest()有时会引发异常。 A.example()调用B.exampleTest()并且不会发现任何异常。因此,即使异常并非始终发生,有时也会发生。当它发生时,A.example()也会引发异常。所以它必须被宣布或抓住。就像B.exampleTest()有时会抛出异常一样,A.example()有时会抛出相同的异常。

现在,该怎么办?你有3个选择:

  1. 声明抛出异常:A.example()的调用者必须决定在这种情况下该做什么。
  2. A.example()内抓住它,并以某种方式处理它。
  3. 捕获它,将其包装在运行时异常(不必在throws子句中声明)中,并抛出此运行时异常。调用者必须处理此运行时异常,但不会从编译器获得任何可以抛出异常的提示。