我想将URL实例化为类中的私有字段,但我无法捕获MalformedURLException。我尝试过使用静态初始化块,但这也不起作用。我该如何解决这个问题?
public class MyClass{
private final static URL DEFAULT_URL = new URL("http://www.yadayada.com?wsdl")
...
}
答案 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();
}
}