"缺少退货声明"在if / for / while中

时间:2014-04-14 10:42:48

标签: java return

我对if() while()for()语句中使用的返回语句有疑问。 正如您在以下方法中看到的那样,期望I return为String值。 问题是,如果我在return语句块中使用if语句,编译器将返回错误missing return statement

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

当然,我可以将方法标题更改为void,然后使用System.out.println代替return。但这是正确的方法吗?我错过了什么吗?

非常感谢任何帮助。

7 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:3)

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

检查Java文档:

  

定义:如果方法声明具有返回类型,那么必须   是方法结束时的return语句。如果退货   语句不存在丢失的return语句错误。

     

如果方法没有返回类型,也会抛出此错误   并且没有使用void宣布(即,它是错误的   中省略)。

您可以解决问题:

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

答案 2 :(得分:2)

尝试使用,好像if condition返回false,因此它将返回空,否则无法返回。

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

因为编译器不知道是否会到达任何块if,所以它会给你一个错误。

答案 3 :(得分:2)

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

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

你实际上在说,我保证任何类都可以使用这个方法(公共),我保证它总会返回一个String(String)。

然后你说如果我的情况属实,我将返回x。那太糟糕了,你的承诺中没有IF。你承诺myMethod总是会返回一个字符串。即使你的条件总是如此,编译器也必须假设它有可能是假的。因此,您总是需要在任何条件之外的非空方法结束时返回一个JUST IN CASE,所有条件都失败。

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

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 docs for return statement

答案 6 :(得分:0)

myMethod()应​​该如何返回一个String值。如果条件为false,myMethod会返回什么内容? ans不是,所以你需要在false条件中定义return null或一些字符串值

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