在测试用例中,我有一行
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;
}
我做错了什么?
答案 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
的参数是兼容的,即变量min
,max
和ist
的类型为int
。