9

答案:这个线程的最佳答案基本上回答了我的问题:在非 void 方法中缺少返回语句 compiles


我想知道为什么我不需要在这个private方法中返回一个值?

public class Test {
  private String testLoop() {
    while(true) { }
  }
  public static void main(String[] args) {
    Test test = new Test();
    test.testLoop();
  }
}

我觉得这不应该编译。但是,它编译得很好。这在哪里被定义为合法?

在这种情况下,我觉得将方法更改为:

private String testLoop() {
  while(true) { 
    if(false == true) { 
      break;
    }
  }
  return null;
}

即使javap告诉我编译器为testLoop.

那么Java编译器如何以及何时决定一个方法是否真的需要返回值呢?


不幸的是,删除了一个提到停止问题的答案。我猜 Java 编译器不会像上面给出的示例那样跟踪方法,因为它无法在一般设置中找到所有可能的循环。

4

5 回答 5

4
private String testLoop() {
    while(true) { }  //infinite loop
}

上面的方法永远不会返回,因为那里有无限循环。所以它不期待回报或者它永远不会达到回报。

于 2013-11-13T11:35:18.133 回答
1

您的 while 循环while(true) { }将永远不会结束,因此编译器不会期望返回语句。如果编译器发现循环将结束,那么它将期望返回语句。您可以手动测试它。尝试int i=1;while(i<0)这样做会产生编译错误,编译器会询问你重新运行一个语句

于 2013-11-13T11:34:41.083 回答
1

方法

private String testLoop() {
    while(true) { }
}

在编译过程中并没有真正的返回点,这意味着当它被编译时,它永远不会“寻找”一个返回点。

这当然不是一个好的做法,空周期,尤其是那些true有条件的周期应该在你的 IDE 中作为错误弹出。

于 2013-11-13T11:39:19.870 回答
0

while(true) { } 不允许执行您编写的任何进一步的语句

private String testLoop() {
        while(true) { }
         //any code at this point is not reachable since it wont come out of while loop. So return statement just like any java code wont be reachable.
      }
于 2013-11-13T11:38:50.240 回答
-4

你调用 testloop 方法,并且不需要返回值....如果你这样写,那么私有方法将不得不返回一些东西。

String result = test.testloop();
于 2013-11-13T11:31:53.293 回答