if / for / while中的“缺less返回语句”

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

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

当然,我可以改变方法头为void并使用System.out.println而不是return 。 但是,这是正确的做法吗? 我错过了什么?

任何帮助,高度赞赏。

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

但是如果你编写if / else块,并且每个块都有返回值,那么编译器就会知道if或者将会得到execute,并且方法会返回一个值。 所以这次编译器不会强迫你。

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

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

检查Java文档:

定义:如果一个方法声明有一个返回types,那么在该方法的末尾必须有一个return语句。 如果返回语句不存在,则抛出丢失的返回语句错误。

如果该方法没有返回types,并且没有使用void声明,也会抛出这个错误(即错误地被忽略)。

你可以做解决你的问题:

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

试试看, if condition返回false,那么它将返回空,否则没有任何返回。

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

因为编译器不知道是否有任何这样的块将被达到,所以它给你一个错误。

这是非法的语法 。 对于你来说,返回一个variables是 可选的。 你必须返回你在方法中指定的types的variables。

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

你有效地说, 我保证任何类都可以使用这个方法(public),我保证它总是会返回一个String(String)。

那么你说如果我的条件是真的,我会返回x。 那太糟糕了,你的诺言没有IF。 你答应myMethod总是返回一个string。 即使你的条件总是正确的,编译器也必须假定它有可能是错误的。 因此,在任何情况之外,您总是需要在非空方法的末尾放置一个返回值。只是在所有情况都失败的情况下。

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

因为如果你不进去,没有什么可以回来的,所以错过了回报。 🙂

应该 :

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

只有当条件为真时,这将返回string。

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

尝试这个:

 public String myMethod() { if(condition) { return x; } return ""; //returns empty string } 
 public String myMethod() // it ALWAYS expects a String to be returned { if(condition) // will not execute always. Will execute only when condition is true { return x; // will not be returned always. } //return empty string here } 

如果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文档用于返回语句

任何如何myMethod()应​​该返回一个string值。如果您的条件是错误的是myMethod返回什么? 答案是否定的,所以你需要在假的条件下定义返回null或一些string值

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