Java 7異常新特性之mutilcatch
歷經(jīng)4年,Java7終于和大家見面。關(guān)于Java7的新特性,詳見這里。
Java7增強(qiáng)了Java的異常處理機(jī)制,主要表現(xiàn)為三個方面:捕捉多種異常類型(multicatch);重新拋出(rethrow)異常;簡化資源清理(try-with-resources)
捕捉多種異常類型
從Java7開始,你就可以在一個catch塊中捕捉多種類型的異常了。增加multicatch的特性的主要是為了降低重復(fù)代碼和較少過大范圍的異常捕捉(例如這樣的捕捉 catch(Exception e))。
假如你正開發(fā)這樣一個應(yīng)用程序,這個程序可以靈活地將數(shù)據(jù)復(fù)制到數(shù)據(jù)庫或者文件中,清單1(CopyToDatabaseOrFile.java)模擬了這種程序, 展示了在catch模塊中存在重復(fù)代碼的現(xiàn)象:
Java代碼
- // CopyToDatabaseOrFile.java
- import java.io.IOException;
- import java.sql.SQLException;
- public class CopyToDatabaseOrFile {
- public static void main(String[] args) {
- try {
- copy();
- } catch (IOException ex) {
- System.out.println(ex.getMessage()); // additional handler code
- } catch (SQLException ex) {
- System.out.println(ex.getMessage()); // additional handler code that's identical to the previous handler's // code
- }
- }
- static void copy() throws IOException, SQLException {
- if (Math.random() < 0.5)
- throw new IOException("cannot copy to file");
- else
- throw new SQLException("cannot copy to database");
- }
- }
清單1: CopyToDatabaseOrFile.java
Java7克服了這種代碼重復(fù)的問題。你只需在一個catch塊中指定多個需要處理的異常,將這些異常按順序排列,并用“|”分隔每個異常。如:
Java代碼
- try{
- copy();
- }catch (IOException | SQLException ex){
- System.out.println(ex.getMessage());
- }
現(xiàn)在,當(dāng)copy()方法拋出任何一種類型,都會在catch塊中被捕捉。
當(dāng)在catch中聲明多種異常時,被聲明的異常默認(rèn)為final的,也就是說不能再修改異常的引用。如上例中,不能再將ex賦值給另外一個異常(如ex=new MyException())。
【編輯推薦】