zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    CSS3实现投影效果
    @font-face使用在线字体
    JS全局对象的属性
    const命令声明变量应注意的几点
    IDEA设置不区分大小写提示
    分布式ID生成-雪花算法
    项目Git分支管理规范
    IDEA使用Mybatis插件 MyBatisCodeHelper-Pro
    解决码云出现git@gitee.com: Permission denied (publickey).
    安装RabbitMQ,一直提示Erlang版本过低
  • 原文地址:https://www.cnblogs.com/huangweikun/p/5144724.html
Copyright © 2011-2022 走看看