Java静态块抛出异常导致程序静默退出的问题咨询
Java静态块抛出异常导致程序静默退出的问题咨询
大家好,我最近碰到了一个特别费解的问题:程序启动后直接静默退出,连main方法都没机会执行。排查下来发现根源是静态代码块里的System.loadLibrary调用抛出了UnsatisfiedLinkError。为了把问题简化,我写了一段能复现这个静默退出现象的测试代码:
public class T { static void bad() { throw new RuntimeException("Terror error!"); } static { System.out.println("in static"); bad(); } public static void main(String[] args) { System.out.println("in main"); } }
我在自己的Java环境(OpenJDK 64-Bit Server VM Homebrew (build 22.0.2, mixed mode, sharing))里运行这段代码,结果程序只打印了“in static”就直接退出了,退出码是1,完全没走到main方法的输出逻辑。
当然,给bad()调用套个try-catch块就能解决这个问题,但如果程序员一开始根本没意识到这里需要捕获异常呢?毕竟有时候可能是别人写的代码,或者自己没考虑到静态块里会抛出未捕获异常的情况……这种情况下有没有什么办法能让程序给出更明确的错误提示,而不是就这么悄无声息地退出?
备注:内容来源于stack exchange,提问作者njlarsson
相关产品推荐
相关产品推荐

