我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后的语句将不会被执行,当然,这种情况下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;
其中的原理是怎么回事呢?
原因是java虚拟机在执行具有返回值的方法时,会在本地变量列表中创建一块区域来存储方法的返回值,在执行返回语句时便会从这个区域中读取值进行返回。
代码一中在try中将1赋值给变量x,然后将变量x的值复制到存储返回值的区域,最后返回值区域存储的就是1,执行返回语句时便返回一。
而在代码二中,同样将1赋值给变量x,然后将x的值复制到存储返回值的区域,此时返回值的区域的值为1,然后跳转到finally语句中,此时将3赋值给局部变量x,然后在将x的 值复制到存储返回值的区域,最后执行返回语句,读取到的返回区域中的值就是3.
代码三中,try中执行的语句是一样的,跳转到了finally语句中后,将3赋值给局部变量,然后将0赋值到存储返回值的区域,最后执行返回语句,读取到的返回区域中的值就是 0,所以就返回0。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索try_catch_return
, try_catch中的return
try_catch_finally
catch return finally、try catch finally、c try catch finally、js try catch finally、oc try catch finally,以便于您获取更多的相关知识。