Java学习之finally

时间:2022-03-14 06:48:24

如果catch中有return语句,finally里面的语句还会执行吗?

  会执行,在return语句的中间执行

 public class Test{
public static void main(String[] args){
System.out.println(getInt());
}
public static int getInt(){
int a = 10;
try{
System.out.println(1/0);
}catch(Exception e){
e.printStackTrace();
a=10;
return a;
}finally{
a = 100;
}
}
}

出现异常后,程序执行到第12句,a=10,接着执行return语句,由于有finally语句,所以跳转到finnally语句中,此时a=100,然后程序又跳转到Catch中的return语句,此时a又恢复10,所以finally中的语句会执行,在return的中间执行。

如果将程序修改为:

 public class Example2 {
public static void main(String[] args) throws HanderException {
System.out.println(getInt());
} public static int getInt(){
int a = 10;
try{
System.out.println(1/0);
}catch(Exception e){
e.printStackTrace();
a=10;
return a;
}finally{
a = 100;
return a;
}
}
}

则执行结果a的值为100,执行完finally中的语句就直接返回了