Java异常派生

时间:2013-11-05 19:17:36

标签: java exception

我正在使我的foo方法抛出异常A,如

void foo() throws A {
    ....
    throw new A();
}

有一个预先存在的函数bar()调用foo,bar最初会抛出一个异常B,它是A的超类,如

void bar() throws B {
    foo();
    throw new B();
}

问题是在foo()中添加throw new A后,编译器正在声明我声明的内容 bar()也抛出A. A是否扩展B这一事实是否暗示了这一点?除了在bar()的throws子句中添加A之外,还有什么解决方法?

编辑:

A是

public class A  extends B {
    private complex-type type;
    public A(String message);
    public A(complex-type type);
}

B是

public class B extends C {
    public B(String message);
}

我认为A的构造函数没有超级调用。可能是原因吗?

3 个答案:

答案 0 :(得分:0)

如果从功能栏中删除了抛出物B.默认操作是重新生成foo()中生成的exeption。

您可以在foo()的调用者中捕获此异常。 Foo本身也可以像你的情况一样抛出异常。在这种情况下,您必须在throw子句中添加A

因此

void bar() throws A, B {
    foo();
    throw new B();
}

如果A和B都扩展Throwable类或实现Exception接口,你也可以简单地抛出异常

答案 1 :(得分:0)

我认为当你说A伸出B时你交换了A和B.你的例子编译得很好:

public class Tmp { 

static class B extends Exception {
}

static class A extends B {
}

void foo() throws A {
    throw new A();
}

void bar() throws B {
    foo();
    throw new B();
}
}

答案 2 :(得分:0)

对不起,伙计们犯了一个非常蹩脚的错误。在该包中有2次出现foo()调用我正在查看错误的事件。非常感谢,抱歉!!!