java异常及错误处理大纲
文章目錄
- 1.異常處理
- 2. 自定義異常
- 3. 斷言及程序的測試
- 4. 程序的調(diào)試
1.異常處理
異常(exception ) 又稱為例外、差錯、違例
對應著Java運行錯誤處理機制
基本寫法
傳統(tǒng)的 語言如何處理
在一些傳統(tǒng)的語言(如C語言中)
if語句來判斷是否出現(xiàn)了例外
全程變量ErrNo
但這有幾個缺點
正常處理與異常處理的代碼同樣處理
可讀性(readability)差
每次調(diào)用一個方法時都進行錯誤檢查
? 可維護性( maintainability )差
? 錯誤由誰處理不請
? 職責不清
Java中處理異常
拋出(throw)異常
運行時系統(tǒng)在調(diào)用棧中查找
? 從生成異常的方法開始進行回溯,直到找到:
? 捕獲(catch) 異常的代碼
?
相關的語句
拋出異常
throw 異常對象;
捕獲異常
try{ 語句組}catch(異常類名 異常形式參數(shù)名){ 異常處理語句組;}catch(異常類名 異常形式參數(shù)名){ 異常處理語句組; }finally{ 異常處理語句組; }其中,catch語句可以0至多個,可以沒有finally語句
異常的分類
Throwable (可拋出)
Error: JVM的錯誤
Exception: 異常
一般所說的異常
是指Exception及其子類
Exception類
構(gòu)造方法
public Exception();
public Exception(String message);
Exception(String message, Throwable cause) ;
? 方法
? getMessage()
? getCause()
? printStackTrace()
?
多異常的處理
子類異常要排在父類異常的前面
finally語句
無論是否有異常都要執(zhí)行
即使其中有break,return等語句
在編譯時,finally部分代碼生成了多遍
Exception分兩種
RuntimeException及其子類,可以不明確處理
否則,稱為受檢的異常(checked Exception)
受檢的異常,要求明確進行語法處理
要么捕(catch)
要么拋(throws):在方法的簽名后面用throws xxxx來聲明
在子類中,如果要覆蓋父類的一個方法,若父類中的方法聲明了 throws異常,則子類的方法也可以throws異常
可以拋出子類異常(更具體的異常),但不能拋出更一般的異常
?
try…with…resource
try(類型 變量名 = new 類型() ){
。。。
}
自動添加了finally{ 變量.close(); }
不論是否出現(xiàn)異常,都會執(zhí)行
2. 自定義異常
創(chuàng)建用戶自定義異常類
創(chuàng)建用戶自定義異常時
(1) 繼承自Exception類或某個子Exception類
(2) 定義屬性和方法,或重載父類的方法
重拋異常及異常鏈接
對于異常,不僅要進行捕獲處理,有時候還需要將此異常進一步傳遞給調(diào)用者,以 便讓調(diào)用者也能感受到這種異常。這時可以在catch語句塊或finally語句塊中采取 以下三種方式:
(1)將當前捕獲的異常再次拋出:
throw e;
(2)重新生成一個異常,并拋出,如:
throw new Exception(“some message”);
(3)重新生成并拋出一個新異常,該異常中包含了當前異常的信息,如:
throw new Exception(“some message”,e);
可用e.getCause() 來得到內(nèi)部異常
3. 斷言及程序的測試
斷言(assertion)
assert的格式是:
assert 表達式; (邏輯表達式)
assert 表達式 : 信息;
在調(diào)試程序時
如果表達式不為true,則程序會產(chǎn)生異常,并輸出相關的錯誤信息
Assert 的編譯及運行
編譯
只有在JDK1.4及以上的版本中才可以使用斷言。
具體地說,在早期的JDK版本(1.4)中編譯時,要通過-source選項來指明版本,如:
javac -deprecation -source 1.4 -classpath . Assertion.java
運行
在運行時,要使assert起作用,則在java命令中,使用選項(-ea,即-enableassertions)。如:
java -ea -classpath . Assertion
程序的測試及 JUnit
程序的修改是經(jīng)常要進行的過程,必須保證程序在修改后其結(jié)果仍然 是正確的。
在編寫程序代碼的同時,還編寫測試代碼來判斷這些程序是否正確。
這個過程稱為“測試驅(qū)動”的開發(fā)過程。
從而保證了代碼的質(zhì)量,減少了后期的查錯與調(diào)試的時間,所以實際 上它提高了程序的開發(fā)效率。
JUnit
在Java的測試過程,經(jīng)常使用JUnit框架
參見http://www.junit.org。
現(xiàn)在大多數(shù)Java集成開發(fā)工具都提供了對JUnit的支持。
在Eclipse中
項目右鍵—New— Junit Test Case
項目右鍵—Run as — Junit Test
測試通過則為綠色,不通過顯示紅色
在NetBeans中
項目右鍵—新建— Junit測試
運行—測試,或者直接按Alt+F6即可
測試函數(shù)
@Test來標注測試函數(shù)
在測試中常用的語句如下:
fail( 信息 ); //表示程序出錯
assertEqauls(參數(shù)1,參數(shù)2 ); //表示程序要保證兩個參數(shù)要相等
assertNull(參數(shù)); //表示參數(shù)要為null
4. 程序的調(diào)試
程序中的錯誤
程序中的錯誤通常可以分成三大類
語法錯誤(Syntax error)
編輯、編譯器發(fā)現(xiàn)
運行錯誤(Runtime error)
異常處理機制
邏輯錯誤(Logic error)
調(diào)試(debug) 、單元測試(unit test)
程序的調(diào)試(debug)
在IDE中,項目上點右鍵 ,debug as…
進入到調(diào)試視圖(debug perspective)
調(diào)試的三種手段
斷點 (breakpoint)
跟蹤 (trace)
監(jiān)視 (watch)
斷點
切換斷點(toggle breakpoint )
用鼠標單擊(或右擊)編輯器左邊條
或者
Eclipse Ctrl+Shift+B
NetBeans Ctrl+F8
跟蹤
| 逐語句執(zhí)行 | F5 | F7 |
| 逐過程執(zhí)行 | F6 | F8 |
| 跳出函數(shù) | F7 | Ctrl+F7 |
| 運行到光標處 | Ctrl+R | F4 |
監(jiān)視
即時監(jiān)視
鼠標指向變量
快速監(jiān)視
點右鍵,Inspector
添加監(jiān)視
點右鍵,Watch
還可以看:調(diào)用堆棧等等
總結(jié)
以上是生活随笔為你收集整理的java异常及错误处理大纲的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ajax搜索思路,jquery创建一个a
- 下一篇: 30岁软件测试转产品_SENSORO 产