在实例化类字段时捕获异常

Ted*_*Ted 0 java

我想将URL实例化为类中的私有字段,但我无法捕获MalformedURLException.我尝试过使用静态初始化块,但这也不起作用.我该如何解决这个问题?

public class MyClass{ 

    private final static URL DEFAULT_URL = new URL("http://www.yadayada.com?wsdl")

    ...
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*ine 6

在异常情况下你需要抛出一些东西.一个Error应该做的工作.

public class MyClass{ 

    private static final URL DEFAULT_URL;
    static {
        try {
            DEFAULT_URL = new URL("http://www.yadayada.com?wsdl")
        } catch (java.net.MalformedURLException exc) {
            throw new Error(exc);
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果抛出异常(它不应该),该类将无法初始化.


ass*_*ias 5

一个简单的解决方法是创建一个静态方法:

private final static URL DEFAULT_URL = getDefaultUrl();

private static URL getDefaultUrl() {
    try {
        return new URL("http://www.yadayada.com?wsdl"); 
    } catch (Exception e) {
        //what do you want to do here?
        return null; //that is an option
        throw new AssertionError("Invalid URL"); //that is another one
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @vikingsteve是的,类*初始化*(不是*loading*)将失败并出现异常.stacktrace将它显示为`<clinit>`方法. (2认同)