处理从静态块抛出的异常

问题描述 投票:0回答:1

我对一个程序在没有输入

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");
    }
}

运行此命令时,进程仅在“静态”打印后静默退出,退出代码为 1。至少我当前的 Java 环境“OpenJDK 64 位服务器 VM Homebrew(版本 22.0.2,混合版)”会发生这种情况。模式,共享)”。

当然,这可以通过

bad
调用周围的 try-catch 块来修复,但是如果因为程序员不清楚需要它而没有这样的块怎么办? (例如,有人可能在我无法控制的库中做了这种事情。)有没有办法挂钩来处理从静态块抛出的
Error
RuntimeException
,至少获得一条消息这表明问题发生在哪里?

java exception static-block
1个回答
0
投票

静态块在程序开始运行之前加载(控制转到主方法)。由于静态块抛出运行时异常,程序退出。

© www.soinside.com 2019 - 2024. All rights reserved.