我正在使用以下行定义处理(或java)中的URL:
URL base = new URL("http://www.google.com/");
所以我得到以下错误:默认构造函数无法处理由隐式超级构造函数抛出的异常类型MalformedURLException。必须定义显式构造函数。我假设是因为如果我的网址无效,则没有相应的catch
来捕获错误(因为我在try
之外声明我的网址。)
但是,我想在try
之外定义此url,因为我的主try
块处于循环中且url是静态的。因此,不需要多次定义url(因为它是静态的,我不怕任何MalformedURLExceptions)。
我该怎么做?除了在单独的try
块中定义url之外,真的没别的办法吗? (因为对于一个简单的静态URL来说,这似乎有点太多了)
// import libraries
import java.net.*;
import java.io.*;
// url
URL base = new URL("http://www.google.com");
void setup() {
}
void draw() {
try {
// retrieve url
String[] results = loadStrings(base);
// print results
println(results[0]);
}
catch (MalformedURLException e) {
e.printStackTrace();
}
catch (ConnectException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
// stop looping
noLoop();
}
答案 0 :(得分:13)
您只需要为您的类定义一个抛出MalformedURLException的默认构造函数:
class MyClass {
private URL url = new URL("http://www.google.com");
public MyClass() throws MalformedURLException {}
}
发生错误是因为Java为你的类生成的构造函数不能抛出任何东西,你必须指定它可能。
修改强>
看到你的代码,你的另一个选择是这个(我假设在你使用URL之前调用setup())
URL url;
void setup() {
try {
url = new URL("http://www.google.com");
} catch (MalformedURLException ex) {
throw new RuntimeException(ex);
}
}
答案 1 :(得分:1)
由于URL
构造函数抛出已检查的异常,您必须捕获它或重新抛出它。您可以创建自己的工厂方法,只需将其包装在RuntimeException
:
public class URLFactory {
public static URL create(String urlString) {
try {
return new URL(urlString);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
}
或者也许只是在您的环境中?
URL createURL(String urlString) {
try {
return new URL(urlString);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
然后使用它:
URL base = URLFactory.create("http://www.google.com");