直接上代码
public static int a(){ int i = 1; try{ i++; return ++i; }catch(Exception e){ }finally { if(i > 1){ System.out.println(" i = " + i);// i = 3 } } return 0; } public static void main(String[] args) { System.out.println(a());// 结果: 3 }
finally 中的代码必然会执行,但是是在执行return的逻辑后 ,方法返回之前执行的。
下面再看一段代码:
public static int a(){ int i = 1; try{ i++; return ++i; }catch(Exception e){ }finally { if(i > 1){ System.out.println(" i = " + i);// i = 3 } return ++i; } } public static void main(String[] args) { System.out.println(a());// 4 }
此时,方法返回的结果是4,也就是说,返回值被覆盖了。