最近整理公司面试题,有一个try catch finally执行顺序的题目,觉得很有意思,记录下
情况一:
@Test public void test001(){ System.out.println(test001Model1()); }
public String test001Model1(){ try { int i =1/0; System.out.println("try"); return "try"; }catch (Exception e){ System.out.println("catch"); return "catch"; }finally { System.out.println("finally"); return "finally"; } }
catch
finally
finally
分析:正常的捕获错误,按顺序执行,在catch里虽然有return语句,但是finally块是必然执行的,finally里面的return会覆盖catch中的return。
情况二:
@Test public void test001(){ System.out.println(test001Model4()); } public String test001Model4(){ try { int i =1/0; System.out.println("try"); return "try"; }catch (Exception e){ System.out.println("catch"); return "catch"; }finally { System.out.println("finally"); // return "finally"; } }
catch
finally
catch
分析:catch中的return,会先记录,finally运行后,会根据return值来return,区别1,1是先记录catch的return,然后finally中也有return,会覆盖catch中的return