java中異常處理try~catch~finally介紹

來源:互聯網
上載者:User

1.異常:
1.1:錯誤和異常是兩個概念:錯誤是需要避免的,而異常是你能預見到的並且能掌控的了

1.2:處理異常:用try。。。catch。。。finally
用throw,就得用throws來修飾方法名
public void sayHello() throws Exception{}這樣寫,如果在別的方法
中想要調用這個方法,要麼用try。。catch捕獲異常,要麼throws
Exception交給下一個用它的方法。
1.3:try{如果這裡面的語句出現錯誤,那麼將不執行下一句,直接跳轉到catch語句當中}
1.4:finally當中的語句不管怎樣都會執行。就算try中和catch用return返回了,那
finally也會照樣執行。
1.5:throw和throws的區別:throw:拋出異常對象。throws:修飾方法的聲明。
1.6: 一個try可以跟多個catch,因為try裡面的代碼可能會出現許多的錯誤,錯誤的種類
或者類型是不相同的,所以可以跟多個,但是找到對應的,下面的catch就不會執行
了,就會跳出try。。catch。
1.7: 異常一般分為兩大類:檢查的:Exception和不檢查的或者叫運行時的:
RuntimeException,這個可以不去管。
1.8: 自訂異常類:繼承自Exception得類就叫做自訂異常類。

 代碼如下 複製代碼
public class myException extends Exception{
public void printstrackance(){
}
}


1.9:
三種方法處理異常:系統自動處理,使用try~catch~finally語句,throw語句直接拋
出異常或使用throws語句間接拋出異常

5、樣本

下面是樣本:TestServlet 調用TestDB和TestPsi,(附代碼)如果發生異常怎樣最快解決程式發生的異常錯誤。

在整個項目的開發過程中,指定錯誤碼表,並分類。如PSI類,資料庫異常類代碼,應用異常類代碼,XML異常,網路通訊異常等等;

採用自己的異常類,當遇到異常是,激發的異常攜帶錯誤類或異常方法的路徑:

如:setFlag(“PSI001”);

 代碼如下 複製代碼

throw new WhcaException(“JB:TestA M:exe1 ”+e.getMessage);

這裡:PSI001為錯誤碼,“JB:TestA M:exe1”為異常鏈,e.getMessage為異常資訊。

例如:遇到錯誤資訊列表為:JB:TestB M:exe2 JB:TestA M:exe1 java.sql.SQLException,說明TestB 的方法exe2調用TestA的方法exe1發生了操作資料庫異常。則可以迅速,準確的定位到那個類那個方法發生了異常。

 註:(簡寫)JB:JavaBean M:Method

訪問資料庫類

 代碼如下 複製代碼

//Class: TestDB

package corbaidl;

/**

 * Title:

 * Description:

 * Copyright:    Copyright (c) 2000

 * Company:

 * @author

 * @version 1.0

 */

import java.io.*;

import java.sql.*;

import whca.common.WhcaException;

public class TestDB {

  private PreparedStatement pstmt =null;

  private Connection conn = null;

  private String flag;

  public TestDB() {

  }

  public void CreateSysMan() throws WhcaException{

    try {

      /**@todo: CreateSysMan method*/

    }

    catch (Exception ex) {

      setFlag("ORA004");

      throw new WhcaException("JB:TestDB M:CreateSysMan ERR="+ex.getMessage());

    }

    finally {

      cleanUpAll();

    }

  }

  public void PublishCert() throws WhcaException{

    try {

      /**@todo: PublishCert method*/

    }

    catch (Exception ex) {

      setFlag("ORA005");

      throw new WhcaException("JB:TestDB M:PublishCert ERR="+ex.getMessage());

    }

    finally {

      cleanUpAll();

    }

  }

  public void cleanUpAll() throws WhcaException {

      try {

          if (pstmt != null)

              pstmt.close();

          if (conn != null)

              conn.close();

      } catch (Exception e) {

          throw new WhcaException("JB:RootCaDB M:cleanUpAll Exception" + e.getMessage());

      }

  }

  public void setFlag(String flag) {

    this.flag = flag;

  }

  public String getFlag() {

    return flag;

  }

}

Psi調用公用類
//Class: TestPsi

package corbaidl;

 

/**

 * Title:

 * Description:

 * Copyright:    Copyright (c) 2000

 * Company:

 * @author

 * @version 1.0

 */

import psi.*;

import whca.common.WhcaException;

public class TestPsi {

  private PSIJni psijni;

  private String flag;

  private int exeHandle=0;

  public TestPsi() {

  }

  public int exePsiInit() throws WhcaException {

          try {

                  //Step 1:psijni init

                  int ret;

                  int handle;

                  psijni = new PSIJni();

                  ret = psijni.pkiInit();

                  if (ret != 0) {

                          setFlag("PSI001");

                          throw new WhcaException("Initialize library environment failed!");

                  }

 

                  //Step 2:psijni getHandle

                  handle = psijni.getHandle();

                  if (handle < 0) {

                          setFlag("PSI002");

                          throw new WhcaException("Get handle error");

                  }

                  return handle;

          } catch (Exception ex) {

                  throw new WhcaException(ex.getMessage());

          }

  }

  public void exePsiEnd(int handle) throws WhcaException {

          try {

                  psijni.destroyHandle(handle);

                  psijni.pkiEnd();

          } catch (Exception ex) {

            throw new WhcaException(ex.getMessage());

          }

 

  }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.