簡體   English   中英

java拋出檢查異常?

[英]java throwing checked exceptions?

我很確定這在以前是可行的,但是日食說它在投擲線中有錯誤。

 try{}
}catch(Exception e){
    throw e;    }

在我以前的學生項目中,我寫道:

 try {
        Class.forName("org.postgresql.Driver");
        this.connection = DriverManager.getConnection(
                DataSource.getURL(), DataSource.getUserName(), DataSource.getPassword());
    } catch (ClassNotFoundException e) {
        System.out.println("Could not find driver to connect to database. Please make"
                + "sure the correseponding postgreSQLjdbc library is added.");
        throw e;

    } catch (SQLException e) {
        System.out.println("Username or password is not correct");
        throw e;
    }

這是完美的。

僅此類型有效,但這不是我想要的

 throw new UnsupportedAddressTypeException();

假定您的方法聲明為引發UnsupportedAddressTypeException但不會引發SQLExceptionClassNotFoundException 只能從聲明已拋出異常或超類的方法中拋出已檢查異常(包括重新拋出現有異常)。

eclipse說它是錯誤的,因為:

包含此代碼塊的方法需要聲明“ throws Exception”

該方法要么需要處理異常本身,要么向其他調用方法發出信號,告知它可以引發異常,並且應該處理該異常。

處理它的另一種方法是將“ throw e”包含在另一個try / catch塊中(處理異常本身的方法)。

您的uni代碼起作用了,因為具有這些語句的方法必須聲明為:

方法x()拋出ClassNotFoundException,SQLException

如果沒有其他信息來說明您到底在做什么,我唯一可以給您的一般解決方案是將異常包裝在未經檢查的RuntimeException中。

您包含的代碼將引發Exception,這是一個已檢查的異常。 除非使用“ throws Exception”聲明包含的方法,否則該方法不能在任何Java版本中使用。

另一方面,請勿登錄並重新拋出。 做一個或另一個。 因此,您的項目代碼應如下所示:

 ....

     } catch (SQLException e) {
        throw RuntimeException("Username or password is not correct", e);
    }

ClassNotFoundException或SQLException是檢查的異常。 所以應該在拋出它們時以某種方式處理(即使使用'throw'關鍵字手動)。

有兩種方法來處理已檢查的異常:1.將可能引發已檢查的異常的代碼括在try-catch塊中。 2.在編寫特定代碼的方法定義之后添加throws子句。

現在,在這里當您“拋出e”(其中e是ClassNotFoundException或SQLException的實例)時,必須以上述兩種方式之一對其進行處理。

但是,UnsupportedAddressTypeException是未經檢查的異常。 因此,您無需顯式處理它。 您可以將其扔到任何地方,Java會照顧好它。

暫無
暫無

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

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