在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。

最新文章

  1. 蓝牙4.0(BLE)开发
  2. I() 方法
  3. SourceInsight
  4. HDU5878
  5. UVa12726 one Friend at a Time (位 广搜)
  6. 使用@Controller注解为什么要配置<mvc:annotation-driven />
  7. 记录一些容易忘记的属性 -- UIButton
  8. Mysql 索引 转载
  9. angularJs中ngModel的坑
  10. 做一款直播类app
  11. 关于WIN7 内存占用很大的 问题svchost.exe
  12. 【Java学习笔记之二十一】抽象类在Java继承中的用法小结
  13. VS2017无法进入安装界面问题的解决方法
  14. 《Oracle DBA工作笔记:运维、数据迁移与性能调优》 PDF 下载
  15. :hover在ios无效问题
  16. PAT 1033 旧键盘打字
  17. CM记录-集群主机存储情况
  18. Info - Get technical information from the Internet
  19. 【ARC082D】Sandglass
  20. 设置eclipse/myeclipse的智能提示

热门文章

  1. string[] 转换为 int[]
  2. opencv学习笔记(五)----图像的形态学操作
  3. 条目八《永不建立auto_ptr的容器》
  4. 【转】idea新建项目文件名为红色的解决办法
  5. SQL 随手记
  6. ui-grid使用详解
  7. AngularJs--Dependency Injection 规则
  8. windows_study_1
  9. Sasha and a Bit of Relax(前缀异或和+二维数组+思维)
  10. hdu1686 Oulipo kmp