相关疑难解决方法(0)

返回类型的Java方法编译时没有return语句

问题1:

为什么以下代码在没有return语句的情况下编译?

public int a() {
    while(true);
}
Run Code Online (Sandbox Code Playgroud)

注意:如果我在一段时间后添加返回,那么我得到一个Unreachable Code Error.

问题2:

另一方面,为什么以下代码编译,

public int a() {
    while(0 == 0);
}
Run Code Online (Sandbox Code Playgroud)

即使以下没有.

public int a(int b) {
    while(b == b);
}
Run Code Online (Sandbox Code Playgroud)

java syntax compilation return while-loop

227
推荐指数
3
解决办法
2万
查看次数

无限循环中断方法签名而没有编译错误

我想知道为什么Java中允许以下代码,而不会出现编译错误?在我看来,此代码通过不返回任何内容来中断方法签名String.有人可以解释我在这里缺少的东西吗?

public class Loop {

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

  public static void main(String[] a) {
    new Loop().withoutReturnStatement();
  }
}
Run Code Online (Sandbox Code Playgroud)

java compilation infinite-loop

65
推荐指数
2
解决办法
2912
查看次数

Java是否识别无限循环?

给出以下代码示例:

public class WeirdStuff {

    public static int doSomething() {
        while(true);
    }

    public static void main(String[] args) {
        doSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个有效的Java程序,虽然方法doSomething()应该返回一个int但从来没有.如果你运行它,它将以无限循环结束.如果将while循环的参数放在一个单独的变量中(例如boolean bool = true),编译器会告诉你在这个方法中返回一个int.

所以我的问题是:这是Java规范中的某个地方,是否存在这种行为可能有用的情况?

java loops while-loop

25
推荐指数
3
解决办法
5743
查看次数

为什么我无需在无限循环后提供返回值?

:这个主题的最佳答案基本上回答了我的问题:在非void方法中缺少return语句编译.


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

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

我觉得这不应该编译.但是,它编译得很好.这被定义为合法的?

在这种情况下,我发现将方法更改为:

private String testLoop() {
  while(true) { 
    if(false == true) { 
      break;
    }
  }
  return null;
}
Run Code Online (Sandbox Code Playgroud)

要求我提供一个返回类型,即使javap告诉我编译器为两个实现生成完全相同的字节代码testLoop.

那么Java编译器如何以及何时确定方法是否实际需要返回值?


不幸的是,删除的答案提到了暂停问题.我想Java编译器并没有像上面给出的例子那样努力跟踪方法,因为它无法在常规设置中找到所有可能的循环.

java

8
推荐指数
1
解决办法
287
查看次数

标签 统计

java ×4

compilation ×2

while-loop ×2

infinite-loop ×1

loops ×1

return ×1

syntax ×1