Java 关于在system.exit情况下执行最终阻塞,也可以通过添加shutdownhook

Java 关于在system.exit情况下执行最终阻塞,也可以通过添加shutdownhook,java,exception,Java,Exception,我开发了一个程序,其中return语句的情况在try块或catch块中,finally块最后执行,但当我写入system.exit在try块中时。在这种情况下,finally块未执行,但我仍要执行,请您告知我是否需要添加Runtime.getRuntime().addShutdownHook在这种情况下,我需要添加在任何情况下都应该执行的代码,即使调用了system.exit。请告知,下面是我的班级 public class Hello { public static void hell

我开发了一个程序,其中return语句的情况在try块或catch块中,finally块最后执行,但当我写入system.exit在try块中时。在这种情况下,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();
    }
}
1) 通常,如果您想在退出后执行某些代码,您确实需要一个关闭钩子

public static void main(String[] args) throws Exception {
    Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            System.out.println("bye");
        }
    });
    hello();
}
2) 在这个具体的例子中,不需要shutdownhook,只需从代码中删除exit

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

当您呼叫系统时。退出(1)

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

那么,如果希望在退出后执行某些代码,为什么要使用System.exit(1)


只需在您的try block中应用一些条件即可退出try block,这将导致在任何情况下都出现finnaly block

非常感谢,正如您在我的上述程序中所建议的那样,我想在程序执行后通过shutdown hook打印简单的sop语句,请您通过在我的上述程序中进行代码更改来显示OK,添加了shudown钩子的示例