要弄清finally到底是什么时候执行的,那就一定要把try catch return放在一起来比较了。
实验代码:
public static int ff(){ Scanner scanner = new Scanner(System.in); String str=scanner.next(); try { int i=Integer.valueOf(str); i++; System.out.println("try"); }catch (NumberFormatException e) { System.out.println("catch"); return 1; }finally { System.out.println("finally"); return 0; } } public static void main(String[] args) { System.out.println(ff()); }
这个代码你在控制台输入数字就进入try里面,输入字母,就进入catch里面。
大家可以分情况来试验一下,比如什么try里面有return,finally里面有return,到底返回那个return值的问题。
我的结论:
1.执行顺序,try->finally->return,或者try->catch->finally->return
2.finally如果有return,这一定是返回finally里面return的值,即使其他地方有return,会执行return的代码,但不会返回