当前位置: 代码迷 >> Java相关 >> java中try-catch-finally中的return话语
  详细解决方案

java中try-catch-finally中的return话语

热度:97   发布时间:2016-04-22 19:19:51.0
java中try-catch-finally中的return语句

在try-catch-finally语句中使用return语句遇到了一些疑问

代码一:

static int intc(){        int x =0;        try{            x=1;            return x;        }finally {            x = 3;          }    }

代码二:在上面那段代码的finally语句中加入了return语句

static int intc(){        int x =0;        try{            x=1;            return x;        }finally {            x = 3;            return x;        }    }

代码三:

static int intc(){        int x =0;        try{            x=1;            return x;        }finally {            x = 3;            return 0;        }    }

那么这三个方法的执行结果是多少呢?

代码一:返回1;代码二:返回3;代码三:返回0;
View Code

其中的原理是怎么回事呢?

  原因是java虚拟机在执行具有返回值的方法时,会在本地变量列表中创建一块区域来存储方法的返回值,在执行返回语句时便会从这个区域中读取值进行返回。

  代码一中在try中将1赋值给变量x,然后将变量x的值复制到存储返回值的区域,最后返回值区域存储的就是1,执行返回语句时便返回一。

  而在代码二中,同样将1赋值给变量x,然后将x的值复制到存储返回值的区域,此时返回值的区域的值为1,然后跳转到finally语句中,此时将3赋值给局部变量x,然后在将x的      值复制到存储返回值的区域,最后执行返回语句,读取到的返回区域中的值就是3.

  代码三中,try中执行的语句是一样的,跳转到了finally语句中后,将3赋值给局部变量,然后将0赋值到存储返回值的区域,最后执行返回语句,读取到的返回区域中的值就是      0,所以就返回0。

2楼钦哥1991
这个可以作为初级面试题啊。
1楼ahdung
c#中不可以在finally中return,就没这个破事。
Re: Antineutrino
@ahdung,引用c#中不可以在finally中return,就没这个破事。,我也想说,什么时候必须要在finally中返回值呢?
  相关解决方案