1、如果是静态方法
public static void testVoid(int i) { try { System.out.println(1); if(i==1) return; System.out.println(2); if (i==2) return; System.out.println(3); if (i==3) return; System.out.println(4); if (i==4) return; }finally { System.out.println("finally"); } }
public static void main(String[] args) { for (int i = 1; i < 5; i++) { testVoid(i); } }
输出如下:
1
finally
1
2
finally
1
2
3
finally
1
2
3
4
finally
2,如果有返回值,finally里有return
public static int testInt(int i) { try { if(i==1) return 1; if (i==2) return 2; if (i==3) return 3; if (i==4) return 4; }finally { System.out.println("finally"); return 10; } }
输出如下:
finally
10
finally
10
finally
10
finally
10
3、如果有返回值,finally改变变量值,变量值是基本类型
public static int testBaseVar(int i) { int num = 0; try { num = 1; return num; } finally { System.out.println("finally"); num = 10; } }
输出如下:
finally
1
4、如果有返回值,返回值是引用类型
public static Map testMap(int i) { Map<String, String> map = new HashMap<>(); try { map.put("1", "a"); return map; } finally { System.out.println("finally"); map.put("2", "b"); } }
输出如下:
finally
{1=a, 2=b}
注意:String类型是不可改变,输入跟基本类型的一样。
代码如下:
public static String testString(int i) { String str = "0"; try { str = "1"; return str; } finally { System.out.println("finally"); str = "a"; } }
输出如下:
finally
1
总结如下
1、finally块里的代码在return之前执行。
2、如果finally块里有return语句的话,它将覆盖掉函数中其他return语句。