在try中不管出现什么错误,肯定执行finally中的代码。

解决方案 »

  1.   

    如果在finally前用了System.exit,或者硬件故障等,finally中的代码不会被执行。
      

  2.   

    执行了System.exit后finally不会执行,finally只对异常中断有用,
    但硬件故障不一定,如果是CPU坏了,就不会执行,而网卡之类的故障就会执行
      

  3.   

    finally在异常抛出中是一点会运行的。
      

  4.   

    finally一般是和try--catch块一起使用的
    用于无论try中程序代码运行是否产生异常(如楼上所说,是程序异常),
    都执行finally中的代码
    常用于处理某些必须完成的事务,即使前面异常了也如是,比如数据库处理中,
    try中取得了一个connection,但是插入insert语句产生了SQLException异常,这是catch块将其捕捉,并设定rallback回滚。
    但是,无论是否插入成功,都是要关闭connection的,所以,这时就可以将connection.cloes()放在finally块中
    btw:使用了finally块的方法,向外throws抛出的异常,会被finally屏蔽掉,这是java的一个小bug,可以参考thinking in java书中关于finally的介绍