1.如果catch中return了,finally还会执行吗
有异常
public class Test {
public static void main(String[] args) {
System.out.println(test());
}
public static String test(){
try{
int i = 1/0;//有异常
return "我在try里面";
}catch (Exception e){
System.out.println("我在哪?");
return "我在catch里面";
}finally {
System.out.println("我在finally里面");
}
}
}
结果:
会执行,执行顺序是try->catch->finally->catch中的return
扩展:
1.无异常,try中有return
public class Test {
public static void main(String[] args) {
System.out.println(test());
}
public static String test(){
try{
int i = 1/1;
return "我在try里面";
}catch (Exception e){
System.out.println("我在哪?");
//return "我在catch里面";
}finally {
System.out.println("我在finally里面");
}
return null;
}
}
结果:
2.有异常,try中有return
public static void main(String[] args) {
System.out.println(test());
}
public static String test(){
try{
int i = 1/0;
return "我在try里面";
}catch (Exception e){
System.out.println("我在catch");
//return "我在catch里面";
}finally {
System.out.println("我在finally里面");
}
return null;
}
结果:
3.有异常,catch中有return
public static void main(String[] args) {
System.out.println(test());
}
public static String test(){
try{
int i = 1/0;
return "我在try里面";
}catch (Exception e){
System.out.println("我在catch");
return "我在catch里面";
}finally {
System.out.println("我在finally里面");
}
}
结果:
4.无异常,finally中有return
public static void main(String[] args) {
System.out.println(test());
}
public static String test(){
try{
int i = 1/1;
return "我在try里面";
}catch (Exception e){
System.out.println("我在catch");
return "我在catch里面";
}finally {
System.out.println("我在finally里面");
return "finally";
}
}
结果:
5.有异常,finally中有return
public static void main(String[] args) {
System.out.println(test());
}
public static String test(){
try{
int i = 1/0;
return "我在try里面";
}catch (Exception e){
System.out.println("我在catch");
return "我在catch里面";
}finally {
System.out.println("我在finally里面");
return "finally";
}
}
结果:
总结:
1.一般情况下,finally里的代码一定会执行
2.如果catch中有return,也会在return之前,执行finally代码块
3.有异常:会立即中止try中的代码执行,无论try有无return,直接跳到catch中处理异常,然后执行finally
4.无异常:try中有return,等到要执行return之前,把finally中的代码执行完,才去执行return
5.如果finally中有return,无论有无异常,都不会执行try或catch中的return,会被finally中的return覆盖掉