1.異常的發生
異常不是一定會發生的,是可能會發生
2、異常
異常是指在程序的運行過程中所發生的不正常的事件,它會中斷正在運行的程序
3、java本身對異常的處理
java編程語言使用異常處理機制爲程序提供了錯誤處理的能力
程序中預先設置好對付異常的處理辦法,在程序運行中發現異常時,對異常進行處理,異常處理完畢後程序繼續運行。
4、java中的異常處理的5個關鍵字
try catch finally throws throw
try:執行可能產生異常的代碼
catch:捕獲異常
finally:無論是否發生異常,代碼總能執行
throws:聲明異常,聲明方法可能要拋出的各種異常
throw:拋出異常, 常
5、try、catch塊捕獲異常三種情況:
1、正常
try中的代碼塊不會產生異常,則執行try-catch塊後的代碼塊
2、出現異常
try中代碼塊中有產生異常的代碼段,從該代碼段直接跳入catch
中對異常類型匹配,匹配完成,程序繼續執行
e.printStackTrace();//打印出現異常的堆棧信息,異常出現的結果和位置
3、異常類型不匹配
try塊中有產生異常的代碼段,跳入catch塊中尋找發現異常類型不匹配,程序
中斷運行
try塊不能單獨存在,與catch塊一起使用,一個try塊可以有多個catch
6、在catch塊中處理異常
a、加入用戶自定義處理信息:System.err.println("除數不能爲0")
b、調用方法輸出異常信息:e.printStackTrace();
異常對象常用的方法:
void printStackTrace();//輸出異常的堆棧信息
String getMessage();//返回異常信息描述的字符串,是
printStackTrace()輸出信息的一部分
7、常見的異常類型:
Exception 所有異常的父類
ArithmeticException 算術錯誤異常,如以零作爲除數
ArrayIndexOutOfBoundsException 數組下標越界
NullPointerException 空指針異常
ClassNotFoundException 不能加載所需要的類
IllegalArgumentException 非法參數
ClassCastException 對象強轉格式錯誤
NumberFormatException 數字格式轉換異常,如把"abc"轉換成數字
8、finally塊中不執行的唯一情況:
在catch塊中寫 System.exit(1);//中斷程序,退出java虛擬機,不執行finally塊
“0”表示正常退出程序,“1”或非零表示非正常退出程序
9、存在return的try-catch-finally塊
try中發現異常-->產生異常對象-->異常類型匹配-->進入catch塊-->執行finally塊
最後在執行 return退出方法
10、多重catch塊
排列catch語句的順序:先子類後父類
發生異常時按順序逐個匹配
只執行第一個與異常類型匹配的catch語句
11、異常的倆種方式
聲明異常 throws Exception 方法體外,多個異常用逗號隔開
拋出異常 throw new Exception(); 方法體裏
處理時:繼續聲明異常或者使用try-catch塊處理異常
main方法聲明的異常由java虛擬機處理
12、 Error與Exception
Error:僅靠程序本身無法恢復的嚴重錯誤
|
Throwable-
|
Exception:由java程序拋出或處理的非嚴重錯誤
Exception包括運行時異常和檢查異常;運行時異常,編譯正常,運行時可能出錯
不要求程序必須做出處理; 運行異常,編譯都不能通過,程序必須處理該類異常。
檢查異常:ClassNotFoundException; SQLException
運行時異常: ArithmeticException;NullPointerException;NumberFormatException
13、開源的日誌記錄工具—log4j
日誌:主要用來記錄系統運行中一些重要操作信息
便於監視系統運行情況,幫助用戶提前發現和避開可能出現的問題,或者出現問題
後根據日誌找到原因
日誌分類:SQL日誌,異常日誌,業務日誌
log4j是開源日誌記錄工具:
控制日誌的輸出級別
控制日誌信息輸送的目的地是控制檯、文件等
控制每一條日誌的輸出格式
使用log4j的步驟:a、在項目中加入log4j的JAR文件
b、創建log4j.properties文件
c、配置日誌文件
d、使用log4j記錄日誌信息
輸出級別:fatal>error>warn>infor>debug
在方法外面建立一個日誌對象:初始化
private static Logger myLog=Logger.getLogger(Case1.class.getName());