日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java异常及错误处理大纲

發(fā)布時間:2025/3/12 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java异常及错误处理大纲 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1.異常處理
    • 2. 自定義異常
    • 3. 斷言及程序的測試
    • 4. 程序的調(diào)試

1.異常處理

異常(exception ) 又稱為例外、差錯、違例
對應著Java運行錯誤處理機制
基本寫法

try{ 語句組 }catch(Exception ex){ 異常處理語句組; } import java.io.*; public class ExceptionForNum {public static void main(String[] args) {try{BufferedReader in = new BufferedReader(new InputStreamReader( System.in ) );System.out.print("Please input a number: ");String s = in.readLine();int n = Integer.parseInt( s );}catch(IOException ex){ex.printStackTrace();}catch(NumberFormatException ex){ex.printStackTrace();}} }

傳統(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部分代碼生成了多遍

package ch5;public class text1 {public static String output = "";public static void foo(int i) {try {if (i == 1) {throw new Exception();}output += "1";} catch(Exception e) {output += "2";return;} finally {output += "3";}output += "4";}public static void main(String args[]) {//foo(0);//System.out.print(output + " ");foo(1);System.out.println(output);} } //最后結(jié)果是23這說明,不管之前catch里是什么語句,都會執(zhí)行finally語句

Exception分兩種
RuntimeException及其子類,可以不明確處理
否則,稱為受檢的異常(checked Exception)

受檢的異常,要求明確進行語法處理
要么捕(catch)
要么拋(throws):在方法的簽名后面用throws xxxx來聲明

在子類中,如果要覆蓋父類的一個方法,若父類中的方法聲明了 throws異常,則子類的方法也可以throws異常
可以拋出子類異常(更具體的異常),但不能拋出更一般的異常

package ch5;import java.io.FileInputStream; import java.io.IOException; public class text1{public static void main(String[] args){try{System.out.println("====Before====");readFile();System.out.println("====After====");}catch(IOException e){ System.out.println(e); }}public static void readFile()throws IOException {FileInputStream in=new FileInputStream("myfile.txt");int b; b = in.read();while(b!= -1) {System.out.print((char)b);b = in.read();}in.close(); } }

?

try…with…resource

try(類型 變量名 = new 類型() ){
。。。
}
自動添加了finally{ 變量.close(); }
不論是否出現(xiàn)異常,都會執(zhí)行

package ch5;import java.io.*; class TryWithResourcesTest {public static void main(String ... args)throws IOException{String path = "c:\\aaa.txt";System.out.println( ReadOneLine1( path ) );System.out.println( ReadOneLine2( path ) );}static String ReadOneLine1(String path){BufferedReader br=null;try {br=new BufferedReader(new FileReader(path));return br.readLine();} catch(IOException e) {e.printStackTrace();} finally {if(br!=null){try{ br.close();}catch(IOException ex){}}}return null;}static String ReadOneLine2(String path)throws IOException{try(BufferedReader br= new BufferedReader(new FileReader(path))){return br.readLine();}} }

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)部異常

public class ExceptionCause {public static void main(String [] args) {try {BankATM.GetBalanceInfo( 12345L);}catch(Exception e) {System.out.println("something wrong�� " + e);System.out.println("cause��" + e.getCause());}} }class DataHouse {public static void FindData( long ID)throws DataHouseException{if( ID>0 && ID<1000)System.out.println( "id: " + ID );elsethrow new DataHouseException("cannot find the id");} } class BankATM{public static void GetBalanceInfo( long ID)throws MyAppException{try {DataHouse.FindData(ID);}catch (DataHouseException e) {throw new MyAppException("invalid id",e);}} } class DataHouseException extends Exception {public DataHouseException( String message ) {super(message);} } class MyAppException extends Exception {public MyAppException (String message){ super (message); }public MyAppException (String message, Exception cause) {super(message,cause);} }

3. 斷言及程序的測試

斷言(assertion)
assert的格式是:
assert 表達式; (邏輯表達式)
assert 表達式 : 信息;
在調(diào)試程序時
如果表達式不為true,則程序會產(chǎn)生異常,并輸出相關的錯誤信息

class Assertion {public static void main(String[] args) {assert hypotenuse(3,4)==5 : "算法不正確";}static double hypotenuse( double x, double y ){return Math.sqrt( x*x + y*y + 1);} }

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

@Test public void testSum2() { HelloWorld a = new HelloWorld(); assertEquals(a.sum(0, 100), 100); // fail("Not yet implemented"); }

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

跟蹤

EclipseNetBeans
逐語句執(zhí)行F5F7
逐過程執(zhí)行F6F8
跳出函數(shù)F7Ctrl+F7
運行到光標處Ctrl+RF4

監(jiān)視

即時監(jiān)視
鼠標指向變量

快速監(jiān)視
點右鍵,Inspector

添加監(jiān)視
點右鍵,Watch

還可以看:調(diào)用堆棧等等

總結(jié)

以上是生活随笔為你收集整理的java异常及错误处理大纲的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。