课程咨询 :18487146383

  • 【昆明Java培训】finally在return之后执行还是之前?

    发布:昆明Java培训      来源:达内新闻      时间:2016-10-21

  • 昆明Java培训的老师今天给大家讲的知识点是,finally在return之后执行还是之前?

    1 package test;

    2

    3 public class TestFinally {

    4    public static void main(String[] args) {

    5        Demo demo=new Demo();

    6        TestFinally tf=new TestFinally();

    7        String result=tf.fun1(demo);

    8        System.out.println(result);

    9        System.out.println(demo.str);

    10    }

    11    private String fun1(Demo demo) {

    12        try {

    13            demo.str+="1";

    14            return fun2(demo);

    15        }finally{

    16            demo.str+="2";

    17        }

    18    }

    19    private String fun2(Demo demo) {

    20        try {

    21            demo.str+="3";

    22            return demo.str;

    23        }finally{

    24            demo.str+="4";

    25        }

    26    }

    27 }

    28 class Demo{

    29    String str="";

    30 }

    执行结果:

    13

    1342

    昆明Java培训的老师写的答案是result=1234 demo.str=1234。在我的记忆中finally是异常捕获关键词,finally代码块一定会执行。但我对其的执行过程并不十分清楚,以前一直认为一旦遇到return返回,即代表函数结束,则finally在return之前执行。所以写出了如上错误结果。而通过正确结果,可以看出,函数在return执行完毕后如果有finally代码块存在,就会在return执行完毕的基础上继续执行finally中的代码块。所以结果为result=12 demo.str=1324。

    进一步的,那如果finally中也有return将怎么执行呢?

    (1)

    1 package test;

    2

    3 public class TestFinally {

    4    public static void main(String[] args) {

    5        Demo demo=new Demo();

    6        TestFinally tf=new TestFinally();

    7        String result=tf.fun1(demo);

    8        System.out.println(result);

    9        System.out.println(demo.str);

    10    }

    11

    12    private String fun1(Demo demo) {

    13        try {

    14            demo.str+="1";

    15            return fun2(demo);

    16        }finally{

    17            

    18            demo.str+="2";

    19        }

    20    }

    21

    22    private String fun2(Demo demo) {

    23        try {

    24            demo.str+="3";

    25            return demo.str;

    26        }finally{

    27            demo.str+="4";

    28            return demo.str;//添加的return语句

    29        }

    30    }

    31    

    32    

    33 }

    34 class Demo{

    35    String str="";

    36 }

    执行结果:

    134

    1342

    (2)

    1 package test;

    2

    3 public class TestFinally {

    4    public static void main(String[] args) {

    5        Demo demo=new Demo();

    6        TestFinally tf=new TestFinally();

    7        String result=tf.fun1(demo);

    8        System.out.println(result);

    9        System.out.println(demo.str);

    10    }

    11

    12    private String fun1(Demo demo) {

    13        try {

    14            demo.str+="1";

    15            return fun2(demo);

    16        }finally{   

    17            demo.str+="2";

    18            return demo.str;//添加的return语句

    19        }

    20    }

    21

    22    private String fun2(Demo demo) {

    23        try {

    24            demo.str+="3";

    25            return demo.str;

    26        }finally{

    27            demo.str+="4";

    28        }

    29    }

    30    

    31    

    32 }

    33 class Demo{

    34    String str="";

    35 }

    执行结果:

    1342

    1342

    说明如果finally中也有return。则由于函数在return执行完毕后如果有finally代码块存在,就会在return执行完毕的基础上继续执行finally中的代码块,则finally中的return会覆盖try代码块中的return的结果。

    昆明Java培训的老师讲到这里你看懂了吗?知道怎么做了吗?不知道的话昆明Java培训的老师欢迎被打扰~

上一篇:通过来配置AOP实现方式

下一篇:AOP面向切面编程的四种实现

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:6月30日

Java--零基础业余班

Java--零基础业余班

开班日期:6月30日

Java--周末提升班

Java--周末提升班

开班日期:6月30日

Java--零基础周末班

Java--零基础周末班

开班日期:6月30日

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:18487146383    全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56