java自定義異常

自定義異常類。
一、第一種定義方式,繼承Exception類
public class MyFirstException extends Exception {
 public MyFirstException() {
  super();
 }
 public MyFirstException(String msg) {
  super(msg);
 }
 public MyFirstException(String msg, Throwable cause) {
  super(msg, cause);
 }
 public MyFirstException(Throwable cause) {
  super(cause);
 }
 //自定義異常類的主要作用是區分異常發生的位置,當用戶遇到
    //異常時,根據異常名就可以知道哪裏有異常,根據異常提示信
   //息進行修改。
}
二、 第二種定義方式:繼承Throwable 類
 
public class MySecondException extends Throwable {
 public MySecondException() {
  super();
 }
 public MySecondException(String msg) {
  super(msg);
 }
 public MySecondException(String msg, Throwable cause) {
  super(msg, cause);
 }
 public MySecondException(Throwable cause) {
  super(cause);
 }
}

三、測試
/**
 * 自定義異常類的使用
 * @author new
 *
 */
public class TestMyException {
 public static void firstException() throws MyFirstException{
  throw new MyFirstException("\"firstException()\" method occurs an exception!");
 }
 
 public static void secondException() throws MySecondException{
  throw new MySecondException("\"secondException()\" method occurs an exception!");
 }
 public static void main(String[] args) {
  try {
   TestMyException.firstException();
   TestMyException.secondException();
  } catch (MyFirstException e1){
   System.out.println("Exception: " + e1.getMessage());
   e1.printStackTrace();
  } catch (MySecondException e2){
   System.out.println("Exception: " + e2.getMessage());
   e2.printStackTrace();
  }
 //當一個try塊後面跟着多個catch塊時,如果發生的異常匹配第一個catch塊的參數,便將異常處理權利交給第一個catch塊。
 //如果發生的異常與第一個catch塊不匹配,便看是否與第二個catch塊匹配,依次下去,如果到最後依然無法匹配該異常,
 //便需要在方法聲明中添加一條throw語句,將該異常拋出。
 //因此,在有多個catch塊,而且每次處理的異常類型具有繼承關係時,應該首先catch子類異常,再catch父類異常。
 //比如,如果MySecondException繼承MyFirstException,那麼最好將catch (MySecondException e2)放在前面,
 //把catch (MyFirstException e1)放在後面。
}
}

異常處理方式:
  1. OutputStreamWriter out = ...       
  2. java.sql.Connection conn = ...       
  3. try {       
  4.  Statement stat = conn.createStatement();       
  5.  ResultSet rs = stat.executeQuery(       
  6. "select uid, name from user");       
  7.  while (rs.next())       
  8.  {       
  9. out.println("ID:" + rs.getString("uid") + ",姓名: " + rs.getString("name"));       
  10.  }       
  11. }       
  12. catch(SQLException sqlex)       
  13. {       
  14.  out.println("警告:數據不完整");       
  15.  throw new ApplicationException("讀取數據時出現SQL錯誤", sqlex);       
  16. }       
  17. catch(IOException ioex)       
  18. {       
  19.  throw new ApplicationException("寫入數據時出現IO錯誤", ioex);       
  20. }       
  21. finally       
  22. {       
  23.  if (conn != null) {       
  24. try {       
  25.  conn.close();       
  26. }       
  27. catch(SQLException sqlex2)       
  28. {       
  29.  System.err(this.getClass().getName() + ".mymethod - 不能關閉數據庫連接: " + sqlex2.toString());       
  30. }       
  31.  }       
  32.      
  33.  if (out != null) {       
  34. try {       
  35.  out.close();       
  36. }       
  37. catch(IOException ioex2)       
  38. {       
  39.  System.err(this.getClass().getName() + ".mymethod - 不能關閉輸出文件" + ioex2.toString());       
  40. }       
  41.  }       
  42. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章