从主类中的静态字段中捕获异常

时间:2014-11-12 21:41:52

标签: java exception-handling static

我之前从未真正考虑过这个问题但是看下面的代码

public class SomeJavaProgram {

    private static String runMe() {
        throw new RuntimeException("hi tadsfasdf");
    }
    private static String name = runMe();

    public static void main(String[] args) {
        System.out.println("hi there.");
    }
}

我之前从未在main中执行过这样的静态,但后来我输入了scala,如果你有子类开始添加defs,则在调用main之前可以抛出异常。

所以,在java(不是scala)中,有没有办法捕获这些异常(如果我是超类和子类最终有一个抛出异常或静态初始化程序块的静态字段)....我怎么能抓住所有这些?

我当然要依靠一个单一的定义而不是抛出哪个是

private Logger log = createLoggerFromSomeLoggingLib();

但在那之后,理想情况下我希望将所有异常记录到记录的文件而不是stderr。

那就是说,我很高兴我现在一直保存stderr / stdout文件和我的日志文件。

1 个答案:

答案 0 :(得分:4)

使用静态初始化程序:

private static String name;

static {
    try {
        name = runMe();
    } catch (RuntimeException e) {
        // handle
    }
}