1.Finally关键字的用法
Finally一般与try连用,程序进入try块后,无论是因为异常而终止,还是因为其他方式返回而终止,finally块一定会执行。
以下情况下不会执行
1. 关闭CPU(如电脑关机或者断电)
2.在执行finally前执行System.exit(0);退出JVM虚拟机
2.面试题
1.
public class Demo1 {
public static void main(String[] args) {
System.out.println(num());
}
public static int num() {
try {
int i = 10;
return i;
}catch(Exception e) {
return 0;
}finally {
int i = 20;
}
}
}
输出结果
10
解释:在程序执行try遇到return时i的值为10,所以此时会将10打包好并且创建一条返回路径等待将打包好的10返回,而finally则是将内存中i变量的值改变成20,但是return返回的10早已经被打包好等待返回,所以并不受finally中i的变化影响。
2.
public class Demo1 {
public static void main(String[] args) {
System.out.println(num());
}
public static int num() {
try {
int i = 10;
return i;
}catch(Exception e) {
return 0;
}finally {
System.out.println("已执行");
}
}
}
输出结果
已执行
10
解释:还会执行,是在return后。如果try里面有return语句,此时会先执行return将返回值打包并创建一个返回路径等待,接着往下搜寻有没有finally语句,如果有则需先执行完finally后,再根据已经创建好的返回路径返回。