首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Java不允许从静态初始化块抛出检查过的异常?

为什么Java不允许从静态初始化块抛出检查过的异常?
EN

Stack Overflow用户
提问于 2010-01-15 16:31:14
回答 4查看 92K关注 0票数 141

为什么Java不允许从静态初始化块抛出检查过的异常?这个设计决定背后的原因是什么?

EN

回答 4

Stack Overflow用户

发布于 2013-03-08 15:59:51

您可以通过捕获任何已检查的异常并将其作为未检查的异常重新引发来解决此问题。这个未检查的异常类可以很好地作为包装器使用:java.lang.ExceptionInInitializerError

示例代码:

代码语言:javascript
复制
protected static class _YieldCurveConfigHelperSingleton {

    public static YieldCurveConfigHelper _staticInstance;

    static {
        try {
            _staticInstance = new YieldCurveConfigHelper();
        }
        catch (IOException | SAXException | JAXBException e) {
            throw new ExceptionInInitializerError(e);
        }
    }
}
票数 73
EN

Stack Overflow用户

发布于 2010-02-27 15:23:39

由于您编写的任何代码都不能调用静态初始化块,因此抛出检查过的exceptions是没有用的。如果可能的话,当一个检查异常被抛出时,jvm会做什么呢?Runtimeexceptions被向上传播。

票数 2
EN

Stack Overflow用户

发布于 2019-06-13 15:53:59

例如:Spring的(org.springframework.web.servlet.DispatcherServlet) DispatcherServlet处理捕获一个受控异常并抛出另一个未受控异常的场景。

代码语言:javascript
复制
static {
    // Load default strategy implementations from properties file.
    // This is currently strictly internal and not meant to be customized
    // by application developers.
    try {
        ClassPathResource resource = new ClassPathResource(DEFAULT_STRATEGIES_PATH, DispatcherServlet.class);
        defaultStrategies = PropertiesLoaderUtils.loadProperties(resource);
    }
    catch (IOException ex) {
        throw new IllegalStateException("Could not load '" + DEFAULT_STRATEGIES_PATH + "': " + ex.getMessage());
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2070293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档