代码一:正常执行
@Test
public void test8() {
System.out.println("a:"+getNum());
}
public int getNum(){
int a = 1;
try {
// int b = 1 / 0;
} catch (Exception e) {
a++;
System.out.println("异常时,a:"+a);
return a;
} finally {
a++;
System.out.println("finally内,a:"+a);
}
a++;
System.out.println("外部,a:"+a);
return a ;
}
执行结果一
代码二:抛出异常
@Test
public void test8() {
System.out.println("调用a:"+getNum());
}
public int getNum(){
int a = 1;
try {
int b = 1 / 0;
} catch (Exception e) {
a++;
System.out.println("异常时,a:"+a);
return a;
} finally {
a++;
System.out.println("finally内,a:"+a);
}
a++;
System.out.println("外部,a:"+a);
return a ;
}
执行结果二
代码三: catch/finally 都return
@Test
public void test8() {
System.out.println("调用a:"+getNum());
}
public int getNum(){
int a = 1;
try {
int b = 1 / 0;
} catch (Exception e) {
a++;
System.out.println("异常时,a:"+a);
return a;
} finally {
a++;
System.out.println("finally内,a:"+a);
return a;
}
}
执行结果三:
结论
finally 内部的代码不论是否抛出异常;是否return ;都会执行!!! return结果时, 以finally内部的语句最优先 ;try和catch内部语句次之; 外部语句最次之