有finally的时候,不论try有没有捕捉到异常,finally都会执行
public class Main {
public static void main(String[] args) {
int a = new Main().test();
System.out.println(a);
}
int test(){
int a = 3;
try {
Class<?> c = Class.forName("");
a=4;
} catch (ClassNotFoundException e) {
e.printStackTrace();
a=5;
}finally {
a=6;
}
return a;
}
}
结果为:
当catch中有return但是finally中没有return的时候
finally也会执行,但是return的结果是执行catch中的return,即使finally改变了返回值,实际返回的值并不会改变
public class Main {
public static void main(String[] args) {
int a = new Main().test();
System.out.println(a);
}
int test(){
int a = 3;
try {
Class<?> c = Class.forName("");
a=4;
return a;
} catch (ClassNotFoundException e) {
e.printStackTrace();
a=5;
return a;
}finally {
a=6;
}
}
}
结果为:
当finally中有返回的时候 执行finally的返回
public class Main {
public static void main(String[] args) {
int a = new Main().test();
System.out.println(a);
}
int test(){
int a = 3;
try {
Class<?> c = Class.forName("");
a=4;
return a;
} catch (ClassNotFoundException e) {
e.printStackTrace();
a=5;
return a;
}finally {
a=6;
return a;
}
}
}
结果:
结论:finally一定会执行,如果报了异常进入catch或者在try就有return,finally也一定会执行。
如果这时fianally中没有return,返回的是try或者catch中的返回数据
如果这时fianally中有return,返回的是finally中的返回数据