return在try-catch-finally中的执行

来源:互联网 发布:android ble数据丢包 编辑:程序博客网 时间:2024/05/16 15:14

在try-catch-finally中, 当return遇到finally:
1.在try catch块里return的时候,finally也会被执行。
2.return 语句会把后面的值复制到一份用来返回,如果return的是基本类型的,finally里对变量的改动将不起效果,如果 return 的是引用类型的,改动将可以起效果。
3.finally里的return语句会把try catch块里的return语句效果给覆盖掉。
以上内容引自:http://blog.csdn.net/andymu077/article/details/6649812

下面用实例验证分析以上结论。
1、在try或catch块里return的时候,finally也会被执行。且执行顺序为:try或catch中return前的语句,finally中的语句,try或catch中的return。

public class Test {    public static void main(String[] args) {        String s = null;        System.out.println(test(s));    }    public static int test(String s){        try{            System.out.println("try");            return 1;        }catch (Exception e){            System.out.println("catch");            return 2;        }finally{            System.out.println("finally");        }}

输出结果为:
try
finally
1

public class Test {    public static void main(String[] args) {        String s = null;        System.out.println(test(s));    }    public static int test(String s){        try{            int i = s.length();            System.out.println("try");            return 1;        }catch (Exception e){            System.out.println("catch");            return 2;        }finally{            System.out.println("finally");        }    }}

输出结果为:
catch
finally
2

2、return 语句会把后面的值复制一份用来返回,如果return的是基本类型的,finally里对变量的改动将不起效果,如果return 的是引用类型的,改动将可以起效果。
(1)返回的是基本类型(包含String)时:

public class Test {    public static void main(String[] args) {        System.out.println(test());    }    public static int test(){        int a = 0;        try{            a = 1;            return a;        }catch (Exception e){        }finally{            a = 2;        }        return a;    }}

输出结果为:1
(2)返回的是引用类型时:

public class Test {    public static void main(String[] args) {        System.out.println(test());    }    public static StringBuffer test(){        StringBuffer a = new StringBuffer();        try{            a = a.append("1");            return a;        }catch (Exception e){        }finally{            a = a.append("2");        }        return a;    }}

输出结果为:12

3、finally里的return语句会把try catch块里的return语句效果给覆盖掉。此时执行finally中的return语句。

public class Test {    public static void main(String[] args) {        System.out.println(test());    }    public static String test(){        String a;        try{            a = "1";            return "a(try)="+a;        }catch (Exception e){        }finally{            a = "2";            return "a(finally)="+a;        }    }}

输出结果为:a(finally)=2

0 0
原创粉丝点击