【问题标题】:Every Java non-void method must return value [duplicate]每个Java非void方法都必须返回值[重复]
【发布时间】:2020-01-18 17:36:09
【问题描述】:

Java tutorial says

任何未声明为 void 的方法都必须包含带有相应返回值的 return 语句,如下所示:

return returnValue;

不过,确实如此。可以在没有 return 语句的情况下创建非 void return 方法。

public class MyClass {

    public String myMethod()  {
        while (true) {
        }
    }

    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

问题:很明显,编译器推断出无法摆脱无限循环(和返回值),但是无论如何不应该强制执行语言规则吗?

【问题讨论】:

  • 我必须把它放到 IDE 中,我很确定这是编译器错误...
  • JLS 怎么说?这就是规范。 Java 教程不是。这只是一个教程,需要一些捷径。
  • 有趣,没有编译错误。
  • 啊,我喜欢学习新事物。谢谢 OP,请按照 YCF 的链接获取答案。

标签: java


【解决方案1】:

Java Language Specification 表示如果方法可以正常完成,则需要返回语句。

如果方法被声明为具有返回类型,则如果方法的主体可以正常完成,则会发生编译时错误(第 14.1 节)。

JLS 的后面部分将某些语句定义为 unreachable,如果编译器可以通过特定的简单规则进行证明(例如,没有退出的 while 循环和评估为 true 的常量条件表达式会使方法体的其余部分无法访问) .

只有在这种情况下才允许省略return语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-15
    • 2019-10-07
    • 2017-07-31
    • 2018-01-24
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多