Java错误:未报告的异常?

时间:2014-03-12 06:49:10

标签: java generics custom-exceptions

我有以下方法:

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已在单独的课程中完成。我想这个类扩展了我制作的新异常类吗?如此迷茫。想家伙?

2 个答案:

答案 0 :(得分:2)

由于StackEmptyException已检查的异常(您不应该首先执行此操作),因此您应该在调用peek()方法时处理该异常。规则是,您应该处理异常或声明它被抛出。

但是,我会退后一步,将StackEmptyException更改为未经检查的例外。然后你不需要处理它或声明它被抛出。

答案 1 :(得分:0)

方法引发的已检查异常(即,扩展Exception但不扩展RuntimeExceptionError的类)应该由此方法的调用方处理,递归地处理。

在这里你有.peek()抛出异常类E(错误的名字,但这只是为了说明)。您必须使用调用foo()的{​​{1}}方法执行以下操作之一:

  • .peek(),或
  • 再扔一次。

即:

catch

或:

// catch
void foo()
{
    try {
        peek();
    } catch (E e) {
       // something
    }
}

你甚至可以重新抛出它:

// throw
void foo() throws E
{
    peek();
}