我想将 URL 实例化为类中的私有字段,但我无法捕获 MalformedURLException。我尝试过使用静态初始化块,但这也不起作用。我该如何解决这个问题?
public class MyClass{
private final static URL DEFAULT_URL = new URL("http://www.yadayada.com?wsdl")
...
}
我想将 URL 实例化为类中的私有字段,但我无法捕获 MalformedURLException。我尝试过使用静态初始化块,但这也不起作用。我该如何解决这个问题?
public class MyClass{
private final static URL DEFAULT_URL = new URL("http://www.yadayada.com?wsdl")
...
}
如果发生异常,您将需要抛出一些东西。一个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);
}
}
...
}
如果抛出异常(不应该),该类将无法初始化。
一个简单的解决方法是创建一个静态方法:
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
}
}
您可以在静态块中执行此操作
public class MyClass {
private final static URL DEFAULT_URL;
static {
try {
DEFAULT_URL = new URL("http://www.yadayada.com?wsdl");
} catch (MalformedURLException e) {
}
}
使用静态块初始化器 - 您可能会在块内捕获异常。
但是,我不建议将其存储为最终类字段作为 URI。将其作为字符串常量并在构造函数或特殊init()
实例方法中初始化
下面试试。您不能在以下内容中使用 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();
}
}