我有以下方法:
public T peek() throws StackEmptyException {
Node<T> tracker = head;
while(tracker.getNext() != null) {
tracker = tracker.getNext();
}
return tracker.getItem();
}
问题在于,当我尝试做类似
的事情时int firstOne = stack.peek();
我得到一个unreported exception StackEmptyException
,我不知道我在这一点上做错了什么。 StackEmptyException
已在单独的课程中完成。我想这个类扩展了我制作的新异常类吗?如此迷茫。想家伙?
答案 0 :(得分:2)
由于StackEmptyException
是已检查的异常(您不应该首先执行此操作),因此您应该在调用peek()
方法时处理该异常。规则是,您应该处理异常或声明它被抛出。
但是,我会退后一步,将StackEmptyException
更改为未经检查的例外。然后你不需要处理它或声明它被抛出。
答案 1 :(得分:0)
方法引发的已检查异常(即,扩展Exception
但不扩展RuntimeException
或Error
的类)应该由此方法的调用方处理,递归地处理。
在这里你有.peek()
抛出异常类E
(错误的名字,但这只是为了说明)。您必须使用调用foo()
的{{1}}方法执行以下操作之一:
.peek()
,或即:
catch
或:
// catch
void foo()
{
try {
peek();
} catch (E e) {
// something
}
}
你甚至可以重新抛出它:
// throw
void foo() throws E
{
peek();
}