簡體   English   中英

如何處理不可能引發的檢查異常

[英]How to deal with checked exception that is impossible to be thrown

我想新建一個url對象,並對該url做一些事情。

例如,

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

該代碼無法編譯,因為URL構造函數聲明了MalformatedException ,我必須聲明該異常或嘗試捕獲該異常。 但是我認為兩種方法都沒有道理,因為url字符串沒有變化,因此無法拋出此異常。

我應該如何處理這種情況?

你可以這樣做:

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!");
    }
}

根據我的理解,您可以像這樣嘗試/捕獲它。

void downloadPage()
{

try {

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

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


}

嘗試抓住它是最好的方法。 如果您不小心將網址修改為http//www.google.com這也可以為您提供保護。

您必須聲明它或嘗試捕獲它。 沒有別的辦法了。

在運行地址之前,編譯器無法“檢查”您的地址是否格式錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM