public class Di1 {
public static void main (String ags[]) {
System.out.println(method(1));
}
public static long method(int index) {
if(index == 1 || index == 2) {
return 1;
}
else
return method(index-1) + method(index-2);
}
}
上述这段程序是可以执行的,但是在else后面加上if(index > 2)就报错,程序如下:
public class Di1 {
public static void main (String ags[]) {
System.out.println(method(1));
}
public static long method(int index) {
if(index == 1 || index == 2) {
return 1;
}
else if(index > 2)
return method(index-1) + method(index-2);
}
}
报的错误是Di2.java:13 missing return statement
我知道报错的原因是缺少返回值,但是这两段程序的功能上有区别吗,请大家指点
楼主所希望代码实现的功能或许没有不同,但实际上的语义却不一样。
在前一版代码中if与else两个分支涵盖了所有可能的控制流路径,而且这两个路径上都有符合类型要求的return语句,所以Java编译器可以在编译时确定method()方法中有return语句。
在后一版代码中,if...else if没有覆盖所有可能的控制流路径;举例说,如果参数是0,则两个分支都会漏过去,来到method()方法的结尾处,而且此处没有符合类型的return语句。因此会报错。要不让编译器抱怨的话,可以在方法末尾加个throw new Error()之类的抛出运行时异常的代码,编译器就能确定这个方法有合法的控制流,就不会报错。或者再加个else语句接在最后,返回个有特殊意义的值,例如-1之类,也行。