try catch finally 与return的执行顺序

来源:互联网 发布:螺旋管换热器计算软件 编辑:程序博客网 时间:2024/05/21 19:46
去年笔试的时候遇到的题,当时就不太确定,面试的时候面试官说你回去写写代码试试,然而饿哦只是看了看书,直到今天才总结出来,把所有的代码补上了。

1.try-catch-finally结构后+return
(1)try中无异常

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

执行结果:
try
finally
test:abc
(2)try中有异常

 private static String test() {        try{            System.out.println("try");            String str=null;            str.toString();        }catch(Exception e){            System.out.println("catch");        }finally{            System.out.println("finally");        }        return "abc";    }

执行结果:
try
catch
finally
test:abc
2.try{ return; }catch(){} finally{} +return
(1)try无异常

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

运行结果:
try
finally
test:123
(2)try有异常

public class Test {    public static  void main(String[] args){        String test = test();        System.out.println("test:"+test);    }    private static String test() {        try{            System.out.println("try");            String str=null;            str.toString();            return "123";        }catch(Exception e){            System.out.println("catch");        }finally{            System.out.println("finally");        }        return "abc";    }}

运行结果:
try
catch
finally
test:abc
3.try{ } catch(){return;} finally{} +return;

public class Test {    public static  void main(String[] args){        String test = test();        System.out.println("test:"+test);    }    private static String test() {        try{            System.out.println("try");              String str=null;            str.toString();        }catch(Exception e){            System.out.println("catch");             return "456";        }finally{            System.out.println("finally");        }        return "abc";    }}

运行结果:
try
catch
finally
test:456
4.try{ return; }catch(){} finally{return;}
(1)try无异常

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

运行结果:
try
finally
test:789
(2)try有异常

public class Test {    public static  void main(String[] args){        String test = test();        System.out.println("test:"+test);    }    private static String test() {        try{            System.out.println("try");             String str=null;            str.toString();            return "123";        }catch(Exception e){            System.out.println("catch");        }finally{            System.out.println("finally");            return "789";        }    }}

运行结果:
try
catch
finally
test:789
5.try{} catch(){return;}finally{return;}

public class Test {    public static  void main(String[] args){        String test = test();        System.out.println("test:"+test);    }    private static String test() {        try{            System.out.println("try");             String str=null;            str.toString();              }catch(Exception e){            System.out.println("catch");             return "456";        }finally{            System.out.println("finally");            return "789";        }    }}

运行结果:
try
catch
finally
test:789
6.try{ return;}catch(){return;} finally{return;}
(1)try无异常

public class Test {    public static  void main(String[] args){        String test = test();        System.out.println("test:"+test);    }    private static String test() {        try{            System.out.println("try");             return "123";        }catch(Exception e){            System.out.println("catch");             return "456";        }finally{            System.out.println("finally");            return "789";        }    }}

运行结果:
try
finally
test:789
(2)try有异常

public class Test {    public static  void main(String[] args){        String test = test();        System.out.println("test:"+test);    }    private static String test() {        try{            System.out.println("try");              String str=null;            str.toString();                return "123";        }catch(Exception e){            System.out.println("catch");             return "456";        }finally{            System.out.println("finally");            return "789";        }    }}

运行结果:
try
catch
finally
test:789
总结:
(1)若finally{}中有return,这个先被执行,其余的return都会被屏蔽掉不能执行(当然这种情况下finally{}后就没有return语句了)
(2)若finally{}中无return,这个时候return语句的优先执行的就是try里面,try里面没有return,又进入异常了,就执行catch里面的return,若try,catch,都没有return,就执行finally{}以后的return语句。

原创粉丝点击