finally语句块一定会执行?

简介

大家可能认为finally语句块一定会执行,我们总是将释放资源和关闭连接的代码放在finally语句块中,其实finally语句未必执行,下面看两个例子:

中止JVM(System.exit()命令)

public class Test {  
    public static void main(String[] args) {  
        try {  
            System.out.println("I'm nomal");  
            //0表示异常退出
            System.exit(0);  
        } catch (Exception ex) {  
            System.out.println("I'm exception");  
            System.exit(0);  
        } finally {  
            System.out.println("I'm finally.");  
        }  
    }  
}

备注:return不足以使finally语句块不执行,大家可以参考:finally块中的代码一定会执行吗?

Daemon线程中的finally语句块

public class Daemon {
    public static void main(String[] args) {
        Thread thread = new Thread(new DaemonRunner(), "DaemonRunner");
        thread.setDaemon(true);
        thread.start();
    }

    static class DaemonRunner implements Runnable {

        @Override
        public void run() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                System.out.println("DaemonRunner is finished");
            }
        }
    }
}

备注:Java中没有非守护线程后,虚拟机需要退出。虚拟机中的守护线程都要立即停止。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,577评论 0 11
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 6,618评论 0 14
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,906评论 18 399
  • 今天晚上我把热水器打开了,烧至75度(最高温度)然后,关掉。 一会儿,我妈过来了,说你把热水器打开了?我说嗯,我要...
    粒粒的向日葵阅读 845评论 0 0