如果catch里面有return语句,finally里面的代码还会执行吗?

来源:互联网 发布:n97i软件下载 编辑:程序博客网 时间:2024/04/30 06:52

答案:会执行,在return 前执行

代码示例1:

/* * java面试题20--如果catch里面有return语句,finally里面的代码还会执行吗? */public class FinallyDemo2 {    public static void main(String[] args) {        System.out.println(getInt());    }    public static int getInt() {        int a = 10;        try {            System.out.println(a / 0);            a = 20;        } catch (ArithmeticException e) {            a = 30;            return a;            /*             * return a 在程序执行到这一步的时候,这里不是return a 而是 return 30;这个返回路径就形成了             * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40             * 再次回到以前的路径,继续走return 30,形成返回路径之后,这里的a就不是a变量了,而是常量30             */        } finally {            a = 40;        }//      return a;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

执行结果:30

代码示例2:

package com.java_02;/* * java面试题20--如果catch里面有return语句,finally里面的代码还会执行吗? */public class FinallyDemo2 {    public static void main(String[] args) {        System.out.println(getInt());    }    public static int getInt() {        int a = 10;        try {            System.out.println(a / 0);            a = 20;        } catch (ArithmeticException e) {            a = 30;            return a;            /*             * return a 在程序执行到这一步的时候,这里不是return a 而是 return 30;这个返回路径就形成了             * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40             * 再次回到以前的路径,继续走return 30,形成返回路径之后,这里的a就不是a变量了,而是常量30             */        } finally {            a = 40;            return a; //如果这样,就又重新形成了一条返回路径,由于只能通过1个return返回,所以这里直接返回40        }//      return a;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

执行结果:40

阅读全文
0 0
原创粉丝点击