如何在Java中为url对象定义显式构造函数

时间:2012-03-24 14:14:12

标签: java constructor processing

我正在使用以下行定义处理(或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();

}

2 个答案:

答案 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");