意料中的意外--異常處理
【是什麼】
異常是超出程式正常正確執行流程的一些特殊情況。異常可以說是程式中的一些錯誤,但並不是所有的錯誤都是異常。例如使用者登入,正常正確的流程是使用者輸入正確的使用者名稱和密碼進入系統,但是輸入的密碼不正確,不能登入系統,這就是一種異常,而不是錯誤。
【為什麼】
①捕獲異常,處理異常,給使用者一個良好的錯誤提示,增加使用者體驗度。
②處理異常,就是儘可能多的為各種可能出現的情況做相應的處理,增強程式健壯性,簡單說就是不會使系統崩潰。
②及時處理異常,減少出現硬體和軟體不必要的問題的可能性。
③提高系統安全性。
④通過獲取Java異常資訊,也為程式的開發維護提供了方便,一般通過異常資訊就很快就能找到出現異常的問題(程式碼)所在。
【分類】
①程式設計式異常(手動處理的異常)
②宣告式異常(自動處理的異常)
宣告式:(在web.xml中通過配置來確定不同的異常型別怎麼處理)例如:
<error-page> <!--異常型別--> <exception-type>com.bjpowernode.drp.sysmgr.manager.PasswordNotCorrentException</exception-type> <!--轉向的頁面--> <location>user_validate.jsp</location> </error-page>
程式設計式:(在catch到異常時,自己寫相應的處理)
try {
//程式程式碼
}catch (Exception e) {
//失敗,直接為result賦值
result= "error";
// 將源資料返回
errorStudentListGlobal= excelStudentList;
System.out.println("匯入失敗,事務回滾,將源資料返回");
}
【關鍵字】
Java異常處理通過5個關鍵字try、catch、throw、throws、finally進行管理。
一般結構如下:
Try{ 程式程式碼 }catch(異常型別 異常的變數名){ 程式程式碼 }finally{ 程式程式碼 }
try語句塊中是有可能出現異常或者我們要監聽的語句程式碼,try語句塊中出現異常,就會被catch語句捕獲並做相應處理。也可以通過throws關鍵字在方法上宣告該異常的丟擲。finally語句塊,finally可以沒有,有也只有一個。假如有finally,那麼無論有沒有發生異常,finally都會在方法return前執行。
注意:
①可以有多個catch,用來匹配多個異常。
②try catch finally均不能單獨使用.
③catch的型別是java語言中定義的,也可以是程式設計師自己定義的,(例如上文中的PasswordNotCorrentException)表示程式碼丟擲異常的型別,異常的變數名錶示丟擲異常的物件的引用。
④try 、catch、finally三個程式碼塊中變數的作用域分別獨立而不能相互訪問.如果要在三個塊中都可以訪問,則需要將變數定義到這些塊的外面.
【異常型別】
豬妖分為四大類:
①Error:編譯和系統的錯誤
②Runtime Exception:執行時異常,只有程式碼執行起來才會丟擲的異常
③Exception:包含執行異常Runtime Exception和非執行異常Non_Runtime Exception
④throw:使用者自定義異常
常見異常分類:
1.NullPointerException:
空指標異常,簡單來說就是某個要用的物件為空,導致取得的資料為空。
2.ClassNotFoundException
指定的類不存在,簡單說就是根據工作空間或者路徑或者類名稱,找不到該類。
3.ArrayIndexOutOfBoundsException
陣列下標越界,呼叫的下標超出了陣列的範圍。
4.IllegalArgumentException
方法的引數錯誤,一般是呼叫的方法中引數傳遞有些問題。
5.FileNotFoundException
檔案位找到,根據路徑找不到檔案。
6.IOException
輸入輸出異常
近些天遇到的異常就這些,下面連結是從網上搜索了一些其他的異常分類,與君共勉。