if / for / while 中的“缺少 return 语句”

"Missing return statement" within if / for / while

提问人:user3531560 提问时间:4/14/2014 最后编辑:Peter Mortensenuser3531560 更新时间:7/25/2021 访问量:173778

问:

我有一个关于 OR 语句中使用的 return 语句的问题。if()while()for()

正如您在以下方法中看到的,它期望 I 是一个 String 值。问题是,如果我在语句块中使用语句,编译器将返回错误。returnreturnifmissing return statement

public String myMethod()
{
    if(condition)
    {
        return x;
    }
}

当然,我可以将方法标头更改为 and use 而不是 .但这是正确的方法吗?我错过了什么吗?voidSystem.out.printlnreturn

java 返回

评论

8赞 devnull 4/14/2014
如果条件不成立,会发生什么情况?在这种情况下,您的方法会返回什么?
0赞 Pphoenix 4/14/2014
如果未找到默认值(如 null),则可以返回该值。调用该方法时,可以检查该值是否等于默认值,从而可以检查是否应进一步处理返回的值。
0赞 Laabidi Raissi 4/14/2014
您应该在语句中的 OR 之后添加语句returnifelse
1赞 fge 4/14/2014
每个代码路径都需要返回;这里唯一返回内容的代码路径是 if is true。condition
0赞 devnull 4/14/2014
java 错误中缺少 return 语句 } 的可能重复项

答:

6赞 Guillermo Merino 4/14/2014 #1

这是因为该函数需要返回一个值。想象一下,如果你执行并且它没有进入你的函数会返回什么,会发生什么?编译器需要知道在函数的每次可能执行中要返回的内容。myMethod()if(condition)

查看 Java 文档:

定义:如果方法声明具有返回类型,则必须有 是方法末尾的 return 语句。如果返回 语句不存在,抛出缺少 RETURN 语句错误。

如果方法没有返回类型,也会引发此错误 并且没有使用 void 声明(即,它被错误地声明了 省略)。

您可以这样做来解决您的问题:

public String myMethod()
{
    String result = null;
    if(condition)
    {
        result = x;
    }
    return result;
}
1赞 Deepu--Java 4/14/2014 #2

仅当条件为 true 时,才会返回字符串。

public String myMethod()
{
    if(condition)
    {
        return x;
    }
    else
        return "";
}
3赞 bNd 4/14/2014 #3

尝试,好像返回 false,所以它将返回空,否则没有返回。if condition

public String myMethod()
{
    if(condition)
    {
        return x;
    }
    return ""
}

因为编译器不知道这些 if 块是否会被触及,所以它会给你一个错误。

5赞 CodeCamper 4/14/2014 #4

是非法的语法。返回变量不是有可无的。必须返回在方法中指定的类型的变量。

public String myMethod()
{
    if(condition)
    {
        return x;
    }
}

你实际上是在说:我保证任何类都可以使用此方法(公共),并且我保证它将始终返回一个字符串(String)。

然后你说如果我的条件是真的,我会返回 x。好吧,这太糟糕了。您的承诺中没有任何 IF。您承诺 myMethod 将始终返回一个 String。

即使条件始终为真,编译器也必须假定它有可能是假的。因此,您始终需要在任何条件之外的非 void 方法的末尾放置一个返回值,以防万一所有条件都失败。

public String myMethod()
{
    if(condition)
    {
        return x;
    }
    return ""; // Or whatever the default behavior will be if all of your conditions fail to return.
}

评论

1赞 Stephen C 4/6/2019
(更正:这不是语法错误/“非法语法”。这是一个编译错误,与语义而不是语法有关。“语法”错误意味着程序不符合语言的语法,但 Java 语法中没有强制执行 return 语句的生成。
15赞 Bhushan Kawadkar 4/14/2014 #5

如果将 return 语句放在 或 语句中,则它可能会也可能不会返回值。如果它不会进入这些语句,那么该方法也应该返回一些值(可能是 null)。为了确保这一点,编译器将强制您编写此 return 语句,该语句位于 或 之后。ifwhileforifwhilefor

但是,如果你写了一个 / 块,并且每个块都有一个返回值,那么编译器就知道 or 将被执行,并且该方法将返回一个值。所以这次编译器不会强迫你。ifelseifelse

if(condition)
{
    return;
}
else
{
    return;
}

评论

2赞 CodeCamper 4/14/2014
我认为总的来说,他应该学会,他需要在每个非无效方法的最后一个括号之前放置一个回报。因为他将在下次一段时间内用其他人包围来重新表述他的问题。
0赞 VP. 4/14/2014
我想说的是,使用多个 return 语句不是一个解决方案。最好在函数/方法的末尾只有一个语句。return
1赞 d3vnico 4/14/2014 #6

如果 为 false,则必须添加 return 语句。condition

public String myMethod() {
    if(condition) {
        return x;
    }

//  if condition is false you HAVE TO return a string
//  you could return a string, a empty string or null
    return otherCondition;  
}

仅供参考:

用于返回语句的 Oracle 文档

1赞 loknath 4/16/2014 #7

无论如何,myMethod() 应该返回一个 String 值。如果你的条件是假的怎么办?- myMethod 是否返回任何内容?答案是否定的,因此您需要为 false 条件定义返回 null 或某个字符串值:

public String myMethod() {
    boolean c = true;
    if (conditions) {
        return "d";
    }
    return null; // Or some other string value
}