java中的return应该放在什么位置?

站在巨人的肩膀上奋斗 发布于 2013/08/26 19:28
阅读 2K+
收藏 1

大家都知道如果一个方法有返回值,那么要有return语句,而return放在何处才算合适呢?(放在方法的最后一行不算)

例如下面两个简单的方法,一个编译通过,一个不通过


public boolean isTrue(){
	if(1 == 1)
		return true;
	else
		return false;
}
	
public boolean isFalse(){
	for(int i = 0; i < 3; i++){
		return true;
	}
}


加载中
0
顺其自然001
顺其自然001

放在什么位置不重要,重要的是,无论任何情况,都要有返回值,包括判断,异常等等,如果有判断,条件成立,有返回值,条件不成立,也得有返回值

0
icgeass
icgeass

放在何处与你的业务逻辑有关,但是声明有返回值就必须明确指出
第二个方法里面循环如果不执行就没有返回值,所以编译不通过
跟下面的道理一样(两个都不能通过编译)

	public boolean isFalse(){
		if(false){
			return false;
		}
	}
	public boolean isTrue(){
		if(true){
			return true;			
		}
	}


站在巨人的肩膀上奋斗
站在巨人的肩膀上奋斗
纯粹的技术,不涉及业务。还是不明白。。。
0
RobertCool
RobertCool
就是你的代码里确保有东西返回。编译器认为if判断不一定会有东西返回。
站在巨人的肩膀上奋斗
站在巨人的肩膀上奋斗
这些我明白,如果不是if,而是其他代码呢?
0
RobertCool
RobertCool
for中也是有判断,while中也有。用这些的时候,在循环体外面需要return
0
逝水fox
逝水fox

关键是你的if 的表达式操作数是常量,编译器可以分析到你那个if是永真的,你细看报错的内容,他应该说的是 你else里面的return 根本没可能执行。

但是编辑器只能分析常量表达式,如果是 int i = 1; if(i == 1)  这种他就不会报错了

逝水fox
逝水fox
回复 @站在巨人的肩膀上奋斗 : 抱歉,测试了一下。他只做了流程分析,没有做运算分析。加了else的才是对的。下面的for报错也是一样的道理
站在巨人的肩膀上奋斗
站在巨人的肩膀上奋斗
public boolean isTrue(){ if(1 == 1) return true; } 你的意思是,这种就不报错,是吧?
0
SHELBY
SHELBY

编译器要保证你的方法必须有返回值(boolean),有就是每个分支都必须有返回值,因为编译器进行编译时,会检查语法错误,isTrue()方法两条分支都有返回值,所有没问题。而编译器检查isFalse()方法时,并不知道你的for循环会不会执行,也就是return语句不一定执行,那么编译器也就不能保证该方法能正确返回。

PS:现在的开发环境一般都集成了编译器的功能,而且还有相应的提示功能,isTrue方法里面的return false语句肯定是执行不了了,开发环境会报dead code警告,应为开发环境帮你计算了1 == 1这个表达式恒为真。而这一工作,编译器不会帮你做。还有isFalse()里面的i++也是dead code因为如果for循环能执行,也会立即返回,而不会执行i++。

望采纳。

0
panmingguang
panmingguang

简单来讲, 需要 停止 向下执行 代码的地方, 

return 后 下面的代码就不会执行 ,此方法结束

一般 如果只有 一个 else的情况 , 我都会使用return 结束

0
panmingguang
panmingguang
public boolean isTrue(int a){
	if(a == 1)
	    return true;
	return false;
}
0
panmingguang
panmingguang

return 不一定要返回值, return 只是作为代码执行终止符

public void aa(int b){
 if(b==1){
  sysoout(b);
  return;
}
sysout(a+1)
}

返回顶部
顶部