zoukankan      html  css  js  c++  java
  • 关于finally中的语句和try中的return之间的执行顺序

    首先是第一种情况:

    我们这里由于程序只是单一的,所以后面的代码只有主题部分:

    Public class test{

           Public static void main(String[] args){

           System.out.println(new test().Test());

    }

           Static int Test(){

                  Int x=1;

                  Try{

                         Return x;

    }finally{

           ++x;

           System.out.println(“x=”+x);

    }

    }

    }

    这里的打印结果是:

    X=2;

    1

    分析:有程序可知,return在try中,那么finally中的code会在return返回之前执行。

    说明:其实具体的执行顺序是这样的,就是执行到了try中的return语句,但是,还没有返回,这时就执行finally中的code,也就是结果已经在返回的结果容器中了,也就是说后面的finally中的x的值对结果没有影响。

    接下来是第二种情况:

    代码如下:

    Static int Test(){

                  Int x=1;

                  Try{

                         Return x;

    }finally{

           Return ++x;

    }

    }

    这时打印的结果就是:

    2

    说明:从结果上可以看出,finally中的return的值覆盖掉了try中的值。

    第三种情况:返回类对象了

    class People

    {

           String name;

           String age;

           public String getAge(){

                  return age;

           }

           public void setAge(String age){

                  this.age = age;

           }

           public String getName(){

                  return name;

           }

           public void setName(String name){

                  this.name = name;

           }

           public People(){

           super();

           }

           public People instanceName(String name,People p){

                  p.setName(name);

                  return p;

           }

           public People instanceAge(String age,People p){

                  p.setAge(age);

                  return p;

           }

    }

    这里是一个测试类:

    class  test1

    {

           public static void main(String[] args)

           {

                  People p = new People();

                  test1(p);

                  System.out.println(p.getName());

                  System.out.println(p.getAge());

           }

           public static People test1(People p){

                  try{

                         System.out.println("try....");

                         return p.instanceName("name",p);

                  }finally{

                         System.out.println("finally.....");

                         //return p.instanceAge("age",p);

                  }

           }

    }

    }

    结果是:

    Try….

    Finally…..

    Name

    另外,如果不将finally中的return注释的话,那结果就是:

    Try…

    Finally….

    Name

    Age

    说明:有结果可知,执行顺序应该是这样的

    结论:

    Try中的语句到àreturn 但是还没有返回,然后在执行finally中的语句,

    (1)    如果finally中有return时,那么执行到return语句,同样没有返回。

    接下来就返回try中返回值,最后返回finally中的返回值。

    (2)另一种情况就是,没有return时,同上面,就是不再执行finally中的返回值。

  • 相关阅读:
    android-基础编程-RecyclerView
    android-基础编程-ListView
    LINUX 日志服务器的搭建
    使用parted进行磁盘分区
    raid磁盘阵列
    LVM逻辑卷管理
    /home 分区迁移试验
    PHP 匹配一个汉字
    xhr dojo load
    ERR: Call to undefined function openssl_random_pseudo_bytes()
  • 原文地址:https://www.cnblogs.com/cloudblogs/p/4354273.html
Copyright © 2011-2022 走看看