Java编译器错误:缺少返回语句

时间:2015-03-27 22:03:05

标签: java exception-handling compilation compiler-errors stack

所以我收到编译错误,我错过了一个返回语句,我看了其他类似的问题,但我仍然对此事感到困惑。

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!");
  }
}

如果之前已经提出过这个问题,我会提前道歉,但我已经看过其他各种问题了,我似乎无法弄清楚这一点。

2 个答案:

答案 0 :(得分:2)

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

在这种情况下,pop的来电者需要处理EmptyStackException。不要在EmptyStackException方法中捕获pop。如果您将其定义为已检查的异常,则需要声明它throws EmptyStackException。如果你没有捕获它,那么该方法将始终返回值或抛出异常,这将满足编译器。

请注意,可以在catch块后返回一个值。这也将满足编译器,但你会回报什么?空值?然后调用者必须测试null,但调用者也可以捕获EmptyStackException

答案 1 :(得分:0)

你的问题与范围有关

当你的功能运行时,它会经历两个条件

  
      
  1. 如果一切顺利,那将是tr块,所以它会返回String
  2.         

    你的问题是第二种情况:

         
        
    1. 如果一切都不顺利哪个会遇到阻塞哪个你没有返回任何String类型,并且在你的函数中查找一个String类型返回给调用者但它找不到所以你得到了一个   错误
    2.   

如何解决它:

  

只需返回一个空字符串即表示出现了问题。