final:是修饰符,修饰的类、变量或者方法不能改变或者继承
finally:捕获异常时候,不管有没有异常的时候都会被执行
finalize:用在垃圾回收的时候,相当于手动标识回收
return和finally谁被最后执行?
return执行时候,先将表达式的值,置于返回栈的顶部(这个是方法最终的返回值),然后去执行finnally的代码
return的最后返回值取决于return后边的表达式的返回值
比如:A是return最终返回操作,B是return后边的表达式,C是finally的执行,执行顺序应该是BCA
示例demo1
public static void main(String[] args) { System.out.println("hello"); // return和finally的demo // System.out.println("temp返回的值=" + temp()); // System.out.println("最后的i值=" + i); } // return和finally的demo // public static int i = 1; // public static int temp(){ // try { // i = 2; // return (i++); // }catch (Exception e){ // e.printStackTrace(); // }finally { // i = 10; // System.out.println("finally i = " + i); // } // return 0; // }
结果:
finally i = 10
temp返回的值=2
最后的i值=10
示例demo2:
main方法中 System.out.println("temp返回的值==" + temp());
public static StringBuilder stringBuilder = new StringBuilder(); public static StringBuilder temp(){ try { stringBuilder.append("a"); return stringBuilder.append("b"); }catch (Exception e){ e.printStackTrace(); }finally { stringBuilder.append("c"); } return stringBuilder; }
结果:temp返回的值==abc