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

时间:2013-06-04 10:47:02

标签: java

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

public class MyClass{ 

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

    ...
}

5 个答案:

答案 0 :(得分: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);
        }
    }
    ...
}

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

答案 1 :(得分: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
    }
}

答案 2 :(得分:1)

您可以在静态块中执行此操作

public class MyClass { 

    private final static URL DEFAULT_URL; 

    static {
      try {
       DEFAULT_URL = new URL("http://www.yadayada.com?wsdl");
    } catch (MalformedURLException e) {
    }
}

答案 3 :(得分:0)

使用静态块初始化程序 - 您可以在块内捕获异常。

但是,我不建议将其作为最终类字段存储为URI。将它作为String常量放置并在构造函数或特殊init() intance方法

中初始化

答案 4 :(得分:0)

请尝试以下操作。你不能在下面使用final关键字:

private static URL DEFAULT_URL = null;
    static{
        try {
            DEFAULT_URL = new URL("http://www.yadayada.com?wsdl");
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }