7.3 return语句
return语句的作用上一节已经介绍了,return语句是函数的值。
关于return语句,总结如下:
(1)return语句返回的数据类型,必须和函数声明的返回类型一致
例如下面的函数test,它的返回类型是boolean,于是它的返回值只能是true或者false
public static boolean test(int x){ if(x > 0) return true; else return false;}(2)函数运行到return语句的时候,函数就结束了,因为函数的计算结果已经出来了。return后面的语句全部都会显示语法错误,显示为“Unreachable code(不可达代码)”。
如下图所示,函数good在第6行已经运行到return语句,也就是已经结束,第8行代码就会显示语法错误:

(3)如果函数的返回类型是void,那么可以没有return语句,如果有,只能是“return;”,后面不能接任何类型的值或表达式。
关于void类型的return,是这样使用的:需要马上结束函数的运行的时候。例如下面的代码,先检查参数,是不是为空,然后再打印,如果是空的就没必要打印了,直接返回。
public static void welcome(String name){
if(name==null || name.equals(""))
return;
System.out.println("欢迎你"+name);
}
下面的print1是另一个void类型又使用return语句的例子,如果不用return语句,可以用else来达到目的,如print2所示,这两个函数使用起来是一样的。
public static void print1(int x,int y){
if(x > y){
System.out.println(x);
return;
}
System.out.println(y);
}
public static void print2(int x,int y){
if(x > y){
System.out.println(x);
}
else{
System.out.println(y);
}
}
无返回值的函数不能计算出一个值,作为最终的值,因为这类函数并不是用来计算值的,而是完成某些功能。有一些没有返回值的函数我们每次练习都在使用,例如main函数,或者打印函数System.out.println。
main函数是特殊的函数,它由我们定义,但是由编译环境去执行。这个函数在开头都要写上void,这就表示该函数没有返回值。下面我们来看看另外一个例子:
static void tip(char c){
System.out.println("你好!你输入的是"+c);
}
tip这个函数,只打印了一句话。把输入的字符打印到一句话里面,就结束了。没有计算结果、没有return语句、没有值的输出。
没有返回值的函数,不能用一个变量去保存。这其实也很明显:函数本身没有计算结果,也就不需要保存计算结果了。这类函数调用示范如下:
public static void main(String[]args){
tip('a');
}
(4)如果函数的类型不是void,那么一定要有一条return语句能执行到,否则就是语法错误。
关于这点,看下面的例子,在分支结构里面直接return,不管任何情况,都有返回值:
public static int func(int x){
if(x > 0)
return x;
else
return-x;
}
下面这个就会出错了:
public static int func(int x){
if(x > 0)
return x;
else if(x >-10)
return-x;
}
因为x可能两个条件都不满足,从而没有return语句。例如x是-20的时候。
还有下面这样的情况,明明所有情况都包含了,但仍然出错,理由仍然是一定需要一条return语句:
public static int func(int x){
if(x > 0)
return x;
else if(x <= 0)
return-x;
}
因为编译器不会检查你的两个条件(或者多个条件)是否是完全互斥的从而覆盖了所有的情况。对于这种情况,最后就不要写else if了,直接写else。
练习题
-
选择题1.关于下面的函数定义,选择正确的答案: (2分) [选择]A.
B. 定义正确,没有错误
C. 缺乏return语句
D. x未定义
E. 返回类型不匹配
public static int func(int x){ if(x> 0) return x; int y=x+6;}2.关于下面的函数定义,选择正确的答案: (2分) [选择]A.
B. 定义正确,没有错误
C. 缺乏return语句
D. x未定义
E. 返回类型不匹配
static boolean func(int x){ if(x <= 9) return x; return x> 9;}3.关于下面的函数定义,选择正确的答案: (2分) [选择]A.
B. 定义正确,没有错误
C. 缺乏return语句
D. x未定义
E. 返回类型不匹配
public static int func(int x){ x=x+x;}4.关于下面的函数定义,选择正确的答案: (2分) [选择]A.
B. 定义正确,没有错误
C. 缺乏return语句
D. x++永远无法执行
E. 返回类型不匹配
static int func(int x){ return x+6; x++;}5.关于下面的函数定义,选择正确的答案: (2分) [选择]A.
B. 定义正确,没有错误
C. 缺乏return语句
D. x=x+8永远无法执行
E. 返回类型不匹配static int func(int x){ if(x > 0) return x+6; else if(x==0) return x; else x=x+8; return x;}6.关于下面的函数定义,选择正确的答案: (2分) [选择]A.
B. 定义正确,没有错误
C. 缺乏return语句
D. return 'D'永远不会执行到
E. 返回类型不匹配static char func(double x){ if(x >= 90) return 'A'; else if(x >= 80) return 'B'; else if(x >= 70) return 'C'; else if(x >= 60) return 'D';} -
判断题1.下面代码的func1和func2两个函数的功能是一样的(两个函数的条件1和代码A是一样的): (2分) [判断]
public static void func1(){ if(条件1) return; else{ 其他代码A; return; }}public static void func2(){ if(条件1) return; 其他代码A;} -
编程题1.定义一个void类型的函数print,也就是没有返回值 (10分) [编程]函数的参数是一个字符串String,如果参数是空的(null)或者内容是空的(参考本节例题welcome函数),什么也不打印;否则打印"你好,我是“+参数