未处理的异常 - 抛出不起作用

时间:2017-06-13 15:21:28

标签: java

在测试用例中,我有一行

ZahlPasstNicht zahlPasstNicht = new ZahlPasstNicht(min, max, ist);

第二部分用红色下划线标出:未处理的异常:ZahlPasstNicht

我可以使用try / catch或让构造函数抛出错误,我试着做后者:

public class ZahlPasstNicht extends IndexOutOfBoundsException {
    int a;
    int b;
    int c;

    public ZahlPasstNicht(int a, int b, int c) throws ZahlPasstNicht {
        this.a = a;
        this.b = b;
        this.c = c;
    }

我做错了什么?

3 个答案:

答案 0 :(得分:3)

我无法想到在异常类的构造函数中放置throws子句是​​有意义的任何情况,因为异常类在实例化时不应抛出另一个异常(尤其不是自身)。

只需写下

public ZahlPasstNicht(int a, int b, int c) {
    this.a = a;
    this.b = b;
    this.c = c;
}

通常,如果你不打算抛出它,你就不会实例化异常类。

这没有多大意义:

ZahlPasstNicht zahlPasstNicht = new ZahlPasstNicht(min, max, ist);

这样做:

throw new ZahlPasstNicht(min, max, ist);

答案 1 :(得分:1)

public ZahlPasstNicht(int a, int b, int c) throws ZahlPasstNicht

您的构造函数指定它可以throw,但您在try块之外调用它,因此异常将无法处理。

在这种情况下,我认为你不需要throw部分。

答案 2 :(得分:0)

提供的代码没有任何问题。从技术上讲,它是正确的,但不是逻辑上的。你可以看到它运行正常。You can see working code here

注意:由于在ideone中,我只能在一个文件中进行编码,因此ZahlPasstNicht类不会在此公开。

代码逻辑错误,因为:

  • 声明构造函数ZahlPasstNicht正在抛出ZahlPasstNicht但是没有代码在ZahlPasstNicht的构造函数中抛出类型ZahlPasstNicht的异常。
  • 此外,如果您在构造函数ZahlPasstNicht中抛出ZahlPasstNicht类型的异常,那么它将陷入无限循环。

问题出现在代码的任何其他部分。确保构造函数ZahlPasstNicht的参数是兼容的,即变量minmaxist的类型为int