一、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後面的代碼再也不執行"); } }數組
(以上均從網上所找,並不是我的所寫)安全