昆明java培训
达内昆明广州春城路

18487146383

热门课程

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

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

昆明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培训教你实现JSP页面跳转简易方法,120天后月薪过万

昆明Java培训告诉你java和大数据和互联网发展中起什么作用

昆明java培训:初学者学Java Script 5个小技巧

昆明java培训多久可以学会?120天教你成为java开发大神!

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货