[英]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
但不會引發SQLException
和ClassNotFoundException
。 只能從聲明已拋出異常或超類的方法中拋出已檢查異常(包括重新拋出現有異常)。
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.