JAVA項目中的經常使用的異常處理狀況

一、Error

LinkageError:連接錯誤;

ThreadDeath:線程死鎖;

OutOfMemoryError:內存溢出;

StackOverflowError :堆棧溢出;

NoClassDefFoundError:類定義錯誤;

Virtual MachineError:虛擬機運行錯誤。

二、運行時異常(unChecked異常)

SecurityException:安全性異常;

NullPointerException:空指針異常;

ClassCastException:類型強制轉換異常;

ClassNotFoundException:找不到類異常;

IllegalArgumentException:非法參數異常;

NegativeArraySizeException:數組長度爲負異常;

ArithmeticException:算術條件異常。如:整數除零;

ArrayIndexOutOfBoundsException:數組下標越界異常;

ArrayStoreException:數組中包含不兼容的值拋出的異常;

StringIndexOutOfBoundsException:字符串下標越界異常;

ArrayStoreException:向數組中存放與聲明類型不兼容對象異常;

三、非運行時異常(checked異常)

IOException:輸入輸出流異常;

SQLException:數據庫操做異常;

EOFException:文件已結束異常;

TimeoutException:執行超時異常;

DataFormatException:數據格式化異常;

NoSuchFieldException:沒有匹配的屬性異常;

ClassNotFoundException:沒有匹配的類異常;

FileNotFoundException:沒有匹配的文件異常;

NoSuchMethodException:沒有匹配的方法異常;

四、Throwable類的主要方法

public String getMessage():返回關於發生的異常的詳細信息。這個消息在Throwable 類的構造函數中初始化了。

public Throwable getCause():返回一個Throwable 對象表明異常緣由。

public String toString():使用getMessage()的結果返回類的串級名字。

public void printStackTrace():打印toString()結果和棧層次到System.err,即錯誤輸出流。

public StackTraceElement [] getStackTrace():返回一個包含堆棧層次的數組。下標爲0的元素表明棧頂,最後一個元素表明方法調用堆棧的棧底。java

例子:sql

OutputStreamWriter out = ... 數據庫

java.sql.Connection conn = ... 
try  // ⑸  
Statement stat = conn.createStatement();  
ResultSet rs = stat.executeQuery( "select uid, name from user" );  
while  (rs.next())  {  
     out.println( "ID:"  + rs.getString( "uid" // ⑹
     + ",姓名:"  + rs.getString( "name" ));  
     }  
     conn.close();  // ⑶  
     out.close(); 
catch (Exception ex)  // ⑵ 
{  
ex.printStackTrace();  //⑴,⑷ 
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
OutputStreamWriter out = ... java.sql.Connection conn = ...
      try  {
            Statement stat = conn.createStatement();
               ResultSet rs = stat.executeQuery( "select uid, name from user" );
                 while  (rs.next()){
                        out.println( "ID:"  + rs.getString( "uid" ) +  ",姓名: "  +
                   rs.getString( "name" ));
                 }
           catch (SQLException sqlex) {
                    out.println( "警告:數據不完整" );
                    throw  new  ApplicationException( "讀取數據時出現SQL錯誤" , sqlex);
              catch (IOException ioex) {
                       hrow  new  ApplicationException( "寫入數據時出現IO錯誤" , ioex);
                finally {
                            if  (conn !=  null ) {
                          try  {  conn.close();
                          catch (SQLException sqlex2) {
                              System.err( this .getClass().getName() + 
                       ".mymethod - 不能關閉數據庫鏈接: "  + sqlex2.toString());                                       }
                           }
                          if  (out !=  null ) {
                              try  {
                               out.close();
                              } catch (IOException ioex2) {
                              System.err( this .getClass().getName() + 
                         ".mymethod - 不能關閉輸出文件"  + ioex2.toString());
                                }
                           }
}

在 Java 應用程序中,異常處理機制爲:拋出異常,捕捉異常。

拋出異常

  當一個方法出現錯誤引起異常時,方法建立異常對象並交付運行時系統,異常對象中包含了異常類型和異常出現時的程序狀態等異常信息。運行時系統負責尋找處置異常的代碼並執行。

  該方法的調用者必須處理或者從新拋出該異常。當方法的調用者無力處理該異常的時候,應該繼續拋出,所經方法都層層上拋獲取的異常,若最終都沒有被處理,將交由虛擬機處理。處理也很簡單,就是打印異常消息和堆棧信息,記錄日誌。

捕捉異常

  在方法拋出異常以後,運行時系統將轉爲尋找合適的異常處理器(exception handler)。潛在的異常處理器是異常發生時依次存留在調用棧中的方法的集合。當異常處理器所能處理的異常類型與方法拋出的異常類型相符時,即爲合適的異常處理器。

  運行時系統從發生異常的方法開始,依次回查調用棧中的方法,直至找到含有合適異常處理器的方法並執行。當運行時系統遍歷調用棧而未找到合適的異常處理器,若是出現異常的線程爲主線程,則整個程序運行終止;若是非主線程,則終止該線程,其餘線程繼續運行。

  在方法中用try-catch語句捕獲並處理異常,catach語句能夠有多個,用來匹配處理異常。而且儘可能將捕獲底層異常類的catch子句放在前面。

  異常老是先被拋出,後被捕捉的。

Java規定

  對於可查異常必須捕捉、或者聲明拋出。容許忽略不可查的RuntimeException和Error。
  RuntimeException由業務邏輯保證。

、拋出異常實例(throws 和 throw)

public class Throws { public static void main(String[] args) throws Exception{//拋出異常類 System.out.println(10 / 0); throw new Exception("拋出異常對象"); //System.out.println("throw後面的代碼再也不執行"); } }數組

(以上均從網上所找,並不是我的所寫)安全

相關文章
相關標籤/搜索