package com.swift; public class Try_Catch_Finally_Test { public static void main(String[] args) { /* * try{}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后? */ System.out.println("執行return先不返回值,把值暫存,等待finally執行完再把那個保存的值返回 "+new Try_Catch_Finally_Test().test()); } static int test() { int x = 1; try { return ++x; } finally { ++x; System.out.println("finally先執行,return最后執行 "+x); } } }
finally中也有return ,最終返回finally中的return
package com.swift; public class Try_Catch_Finally_Test { public static void main(String[] args) { /* * try{}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后? */ System.out.println("執行return先不返回值,把值暫存,等待finally執行完再把那個保存的值返回 "+new Try_Catch_Finally_Test().test()); } static int test() { int x = 1; try { return ++x; }catch(Exception e) { e.printStackTrace(); return ++x; }finally { ++x; System.out.println("finally先執行,return最后執行 "+x); return ++x; } } }
有人說return執行2次,finally在中間執行,可以這樣理解,可能也方便死記
但我覺得return就是在finally后執行的,在finally執行后把返回值返回給調用處,只是要注意返回的值不是最終的值,而是return將要把返回值返回卻因finally出現不能返回了而臨時保存的值。這里有一個打斷。