提问人:user3531560 提问时间:4/14/2014 最后编辑:Peter Mortensenuser3531560 更新时间:7/25/2021 访问量:173778
if / for / while 中的“缺少 return 语句”
"Missing return statement" within if / for / while
问:
我有一个关于 OR 语句中使用的 return 语句的问题。if()
while()
for()
正如您在以下方法中看到的,它期望 I 是一个 String 值。问题是,如果我在语句块中使用语句,编译器将返回错误。return
return
if
missing return statement
public String myMethod()
{
if(condition)
{
return x;
}
}
当然,我可以将方法标头更改为 and use 而不是 .但这是正确的方法吗?我错过了什么吗?void
System.out.println
return
答:
这是因为该函数需要返回一个值。想象一下,如果你执行并且它没有进入你的函数会返回什么,会发生什么?编译器需要知道在函数的每次可能执行中要返回的内容。myMethod()
if(condition)
查看 Java 文档:
定义:如果方法声明具有返回类型,则必须有 是方法末尾的 return 语句。如果返回 语句不存在,抛出缺少 RETURN 语句错误。
如果方法没有返回类型,也会引发此错误 并且没有使用 void 声明(即,它被错误地声明了 省略)。
您可以这样做来解决您的问题:
public String myMethod()
{
String result = null;
if(condition)
{
result = x;
}
return result;
}
仅当条件为 true 时,才会返回字符串。
public String myMethod()
{
if(condition)
{
return x;
}
else
return "";
}
尝试,好像返回 false,所以它将返回空,否则没有返回。if condition
public String myMethod()
{
if(condition)
{
return x;
}
return ""
}
因为编译器不知道这些 if 块是否会被触及,所以它会给你一个错误。
这是非法的语法。返回变量不是可有可无的。必须返回在方法中指定的类型的变量。
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.
}
评论
如果将 return 语句放在 或 语句中,则它可能会也可能不会返回值。如果它不会进入这些语句,那么该方法也应该返回一些值(可能是 null)。为了确保这一点,编译器将强制您编写此 return 语句,该语句位于 或 之后。if
while
for
if
while
for
但是,如果你写了一个 / 块,并且每个块都有一个返回值,那么编译器就知道 or 将被执行,并且该方法将返回一个值。所以这次编译器不会强迫你。if
else
if
else
if(condition)
{
return;
}
else
{
return;
}
评论
return
如果 为 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;
}
仅供参考:
无论如何,myMethod() 应该返回一个 String 值。如果你的条件是假的怎么办?- myMethod 是否返回任何内容?答案是否定的,因此您需要为 false 条件定义返回 null 或某个字符串值:
public String myMethod() {
boolean c = true;
if (conditions) {
return "d";
}
return null; // Or some other string value
}
评论
return
if
else
condition