如何处理无法抛出的已检查异常

时间:2014-02-28 03:42:17

标签: java

我想创建一个url对象,并使用url做一些事情。

例如,

void downloadPage()
{
    URL url=new URL("http://www.google.com");
    do(url);
}

代码无法编译,因为URL构造函数声明MalformatedException,我必须声明异常或尝试捕获它。但我认为这两种方式都没有意义,因为url字符串不会改变,这种异常是不可能被抛出的。

我应该如何处理这种情况?

4 个答案:

答案 0 :(得分:2)

你可以这样做:

try {
    throwsCheckedException();
} catch(CheckedException e) {
    throw new RuntimeException(e);
}

这样一来,如果你错了就会抛出异常,但是如果你确定不会发生这种情况你就不必处理它。这可能不适合生产代码。如果程序对于不是您的人来说很重要,那么更好的解决方案可能是以适当的方式记录它。

你真的不能确定一个例外永远不会抛出,我个人已经发生了几次,我很确定它不会这样做。

另一种方式是以一种狡猾的方式处理它:

// in some utility class
public static void exitWithError(Throwable e, String msg) {
    dumpStackTraceToFile(e); // something you should have
    JOptionPane.showMessageDialog(null, msg);
    System.exit(1); // force JVM exit when the dialog closes
}

// wherever this should be, only do it once
static final URL GOOGLE;
static {
    try {
        GOOGLE = new URL("http://google.com");
    } catch(MalformedURLException e) {
        exitWithError(e, "Somebody changed the Google URL!");
    }
}

答案 1 :(得分:0)

你可以根据我的理解将它包围在try / catch中。

void downloadPage()
{

try {

  URL url=new URL("http://www.google.com");
   do(url);

} catch(MalformedException me) { 
     System.out.println("caught this: " + me);
}


}

答案 2 :(得分:0)

尝试抓住它是最好的方法。如果您不小心将网址编辑为http//www.google.com,这也可以保护您。

答案 3 :(得分:0)

您必须申报或尝试抓住它。没有其他办法。

在运行之前,编译器无法“检查”您的地址是否格式不正确。