关于java:if / for / while中的“ Missing return statement”

“Missing return statement” within if / for / while

我有一个关于if() while()for()语句中使用的return语句的问题。
如您在以下方法中看到的,期望我return一个String值。
问题是,如果要在我的if语句块中使用return语句,则编译器将返回错误missing return statement

1
2
3
4
5
6
7
public String myMethod()
{
    if(condition)
    {
       return x;
    }
}

当然,我可以将方法标题更改为void并使用System.out.println而不是return。 但这是正确的方法吗? 我想念什么吗?

非常感谢您的帮助。


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

但是,如果您编写if / else块并且其中每个块都已返回,则编译器知道ifelse将执行并方法将返回一个值。因此,这次编译器不会强迫您。

1
2
3
4
5
6
7
8
if(condition)
{
 return;
}
else
{
 return;
}


那是因为函数需要返回一个值。想象一下,如果执行myMethod()而不执行if(condition)会发生什么,函数将返回什么?编译器需要知道在函数的每次可能执行中返回什么

检查Java文档:

Definition: If a method declaration has a return type then there must
be a return statement at the end of the method. If the return
statement is not there the missing return statement error is thrown.

This error is also thrown if the method does not have a return type
and has not been declared using void (i.e., it was mistakenly
omitted).

您可以解决您的问题:

1
2
3
4
5
6
7
8
9
public String myMethod()
{
    String result = null;
    if(condition)
    {
       result = x;
    }
    return result;
}


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

1
2
3
4
5
6
7
public String myMethod()
{
    if(condition)
    {
       return x;
    }
}

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

然后您说如果我的条件为真,我将返回x。好吧,这太糟糕了,您的承诺没有中庸之道。您保证myMethod总是返回一个字符串。即使您的条件始终为true,编译器也必须假定它可能为假。因此,您总是需要在任何条件之外的非空方法的末尾添加一个返回值,以防万一所有条件都失败了。

1
2
3
4
5
6
7
8
public String myMethod()
{
    if(condition)
    {
       return x;
    }
  return""; //or whatever the default behavior will be if all of your conditions fail to return.
}


尝试使用,就像if condition返回false一样,因此它将返回空值,否则不返回任何内容。

1
2
3
4
5
6
7
8
public String myMethod()
{
    if(condition)
    {
       return x;
    }
return""
}

由于编译器不知道是否会到达任何if块,因此会给您带来错误。


myMethod()应??该如何返回String值。如果您的条件为false,那么myMethod返回什么? ans否,因此您需要在错误条件下定义return null或某些字符串值

1
2
3
4
5
6
7
public String myMethod() {
    boolean c=true;
    if (conditions) {
        return"d";
    }
    return null;//or some other string value
}

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

1
2
3
4
5
6
7
8
9
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文档返回声明


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

1
2
3
4
5
6
7
8
9
public String myMethod()
{
    if(condition)
    {
       return x;
    }
    else
       return"";
}