java中,finally代码块一定会被执行吗。恐怕要让大家失望了,有3中可能finally代码块中代码不会被执行。
1、try代码块没有被执行
public static void main(String[] args) {
test();
}
private static void test(){
int a = 1;
int b = a/0;
try{
a = a+b;
}finally {
System.out.println("finally code is run");
}
}
2、try,或者catch代码块中存在System.exit(0),或者其他中断程序的代码。
3、执行该代码的线程为守护线程,在这个过程中,如果主线程死亡,则不会执行finally代码块
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(new MyThread());
thread.setDaemon(true);//设置该线程为守护线程,守护线程是和主线程共亡的
thread.start();
Thread.sleep(100);
thread.interrupt();
}
private static class MyThread implements Runnable{
@Override
public void run() {
try{
while(!Thread.currentThread().isInterrupted()) {
System.out.println("try code is run!");
Thread.sleep(10);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
e.printStackTrace();
} finally {
System.out.println("finally code is run!");
}
}
}