本帖最后由 段海涛 于 2012-11-21 22:13 编辑
这样写为什么会编译报错?该怎么修改?- class FinalTest {
- public String divErr(int y) {
- String z = "默认返回值";
- try {
- int x = 5 / y;
- return z;
- } catch (Exception e) {
- z = "catch返回值";
- } finally {
- z = "finally返回值";
- }
- }
- }
复制代码 显然,这是因为try语句块中的retrun语句可能执行不到,而catch、finally语句块中有没有return语句,这样可能导致函数没有返回值,因此,必须在catch或者finally中加入return语句,如下修改则可编译通过- class FinalTest {
- public String divErr(int y) {
- String z = "默认返回值";
- try {
- int x = 5 / y;
- return z;
- } catch (Exception e) {
- z = "catch返回值";
- System.out.println("z="+z);
- return z;
- } finally {
- z = "finally返回值";
- System.out.println("z="+z);
- //return z;
- }
- }
- }
复制代码 这样一来,如在main方法中调用一下,System.out.println("方法运行完毕的返回值是:"+(new FinalTest()).divErr(0) );
运行结果就是这样:
z=catch返回值
z=finally返回值
方法运行完毕的返回值是:catch返回值
明明在catch中已经把z修改,并且进行了return,为何还会执行finally中的语句呢?
既然执行了finally中的语句,且修改了 z = "finally返回值",为何函数运行完毕后的最终返回值却又还是回到catch中的z的值呢?
如果把finally中的return z注释去掉,函数的最终返回值又将发生什么变化?
|