关于在system.exit中执行finally块也可以通过添加shutdown hook来实现

时间:2013-03-07 05:52:28

标签: java exception

我已经开发了一个程序,其中return语句的情况在try块或catch块中最后块执行,但是当我在try块中写system.exit时,在这种情况下finally块没有被执行但是我仍然想要要执行,请问我是否需要添加Runtime.getRuntime().addShutdownHook在这种情况下我需要添加应该在任何情况下执行的代码,即使调用system.exit也是如此。请指教,下面是我的班级

public class Hello {
    public static void hello(){
        try{
            System.out.println("hi");
            System.exit(1);
           // return;

            }catch(RuntimeException e)
            {       //return;
        }
        finally{
            System.out.println("finally is still executed at last");
        }
    }
    public static void main(String[] args){
        Hello.hello();
    }
}

2 个答案:

答案 0 :(得分:1)

1)一般来说,如果你想在退出

后执行一些代码,你需要一个关闭钩子
public static void main(String[] args) throws Exception {
    Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            System.out.println("bye");
        }
    });
    hello();
}

2)在这个具体案例中,不需要关闭钩子,只需从代码中删除退出

public static void hello() {
    try{
        System.out.println("hi");
    } catch (RuntimeException e) {
        //
    } finally{
        System.out.println("finally is still executed at last");
    }
}

答案 1 :(得分:0)

当您调用System.exit(1)

它退出程序,JVM强制停止执行程序。

那么为什么要在退出

之后执行一些代码时使用System.exit(1)

只需在你的try块中应用一些条件就可以退出try块,这会导致每个情况下的finnaly阻塞