1.什麼是異常?
所謂異常即是指可能由於外部系統的,導致程序可能出錯或中斷的原因。
2.常見的一些異常
空指針 NullPointerException
數組下表越界 ArrayIndexOutOfBoundsException
棧溢出
文件不存在 UnsupportedOperationException
類型轉換異常 ClassCastException
參數爲負數 IllegalArgumentException
算術錯誤 ArithmeticException
3.異常的分類:
首先,異常分爲強制異常和非強制異常。
非強制異常是指那些因爲程序出錯或者說以爲代碼問題而導致的錯誤,如上面所寫的空指針,數組下標越界,類型轉換異常等等,因爲代碼而導致程序出錯。
強制異常是指一些程序員未能解決的一些程序漏洞,爲了防止出錯,拋出的異常。這種異常是有程序員考慮故意拋出所形成的。強制異常是可以再JDK的API中具體尋找
4.非強制異常的分析與處理方式
(1).根據異常類,來確定異常是有上面原因形成,可以在(JDK的API中查詢)
(2).異常類後邊一般會有提示信息,可以進一步診斷。
(3).找到出錯的位置,找到第一個由自己寫的類,然後雙擊,就能找到出錯行。
(4).分析自己代碼出錯的原因,可以用輸出函數即System.out.println();判斷程序運行到哪裏出錯的《《《《號稱最強大的檢測方法。
(5).找到出錯位置修改成正確的代碼
5.強制異常從哪裏來:
前面已經說過,強制異常一般是程序員自己不能解決防止出錯自己拋出的,或者不願解決異常繼續向外拋出的。所以強制異常一般的來源是:要麼是自己不能解決漏洞拋出的,要麼是不願解決或解決不了繼續向外拋出的。
6.強制異常的分析和處理方式:
面對強制異常,我們一般有兩個解決方式,要麼就解決這個異常,要麼就把異常繼續向外拋,讓調用的人自己去解決,即別人幫你解決。
(1)自己解決異常:
一般自己解決異常都常用try,catch,finally處理機制,如try{
file.createNewFile();
}catch(FileNotFoundException ffe){
}finally{
}
這裏就解決了創建文件時所拋出的異常,catch中所寫應爲如果出錯,那麼執行的代碼,finally中所寫一般爲不管是否出現異常都要執行的代碼,如有時需關閉程序等操作就可以寫入其中。
值得注意的是,如果try中有兩個可能拋出異常的代碼,應相應的用兩個catch來解決異常,但如果第一個拋出異常,將不會執行第二個代碼。
如try{
file.createNewFile();
new Robot();
}catch(FileNotFoundException ffe){
}catch(AWTException e){
}finally{
}
如果file.createNewFile(); 拋出異常,則new Robot();不再執行,而是直接跳到catch(FileNotFoundException ffe)中去。
(2)繼續向外拋出
有的時候我們也不能解決異常,或者沒必要,或者不想解決這個異常的時候,就可以繼續向外拋出異常,程序員向外拋出異常的時候,要用到throw,向外拋出一個異常,而當我們繼續向外拋出的時候則需要用到關鍵字throws
如:publuc class createfile throws IOException{
File file = new File(path);
file.createNewFile();
}
這樣我們就繼續向外拋出了這個異常,留給別人解決。值得注意的是,這種方式雖然簡單,但是卻沒有解決實際問題,所以要慎用。
(3)注意兩種方法的使用範圍
一、自己寫軟件時,由於是直接面對客戶,所以出現異常就必須要處理掉,儘量不要往外拋出異常,這樣體驗度纔會高。
二、寫第三方的插件時,就要想着外拋出異常,否則當出現錯誤的時候,別人卻找不到出錯源,會到來很多麻煩,所以就不需要去處理異常。
7.Debug模式調試錯誤
在java中有一種Debug的調試模式,可以用來調試,找出錯誤源,對於熟悉的人可能比較方便,但對於不熟悉的人來說,反而會很麻煩。所以在對異常進行處時,個人建議還是用史上最強大的調試方式,System.out.println(); 功能強大,使用方便,範圍廣泛,不用不知道,一用嚇一跳!是居家旅行,調試查錯的必備方法,是程序員的春天!
8.that's all,thank you !!