因此,我遇到了缺少返回语句的编译器错误,并且查看了其他类似的问题,但是我对此事仍然感到困惑。

public String pop()
{
  try
  {
    if(top == -1)
    {
      throw new EmptyStackException("The stack is empty!");
    }
    String x = stack[top];
    top--;
    return x;
  }
  catch (EmptyStackException e)
  {
    System.out.println("The stack is empty!");
  }
}

如果有人问过这个问题,我先向您道歉,但我看过其他各种问题,似乎无法弄清楚。

最佳答案

如果捕获到异常,pop的返回值是多少?该执行路径中没有return语句。这就是编译器抱怨的原因。

在这种情况下,pop的调用者需要处理EmptyStackException。不要在EmptyStackException方法内捕获pop。如果将其定义为已检查的异常,则需要声明它为throws EmptyStackException。如果没有捕获,则该方法将始终返回值或引发异常,这将使编译器满意。

注意,可以在catch块之后返回一个值。这也将使编译器满意,但是您将返回什么?空值?然后,调用方必须测试null,但调用方也可能会捕获EmptyStackException

09-12 10:33