日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java的throw_浅谈Java的throw与throws

發(fā)布時間:2024/4/14 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java的throw_浅谈Java的throw与throws 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

淺談Java異常

以前雖然知道一些異常的處理,也用過一些,但是對throw和throws區(qū)別還是有不太清楚。今天用實例測試一下

異常處理機制

異常處理是對可能出現(xiàn)的異常進行處理,以防止程序遇到異常時被卡死,處于一直等待,或死循環(huán)

異常有兩個過程,一個是拋出異常;一個是捕捉異常

拋出異常

拋出異常有三種形式,一是throw,一個throws,還有一種系統(tǒng)自動拋異常。下面它們之間的異同

系統(tǒng)自動拋異常

當程序語句出現(xiàn)一些邏輯錯誤、主義錯誤或類型轉換錯誤時,系統(tǒng)會自動拋出異常。如:

1 public static voidmain(String[] args) {2 int a = 5, b =0;3 System.out.println(5/b);4 //function();

5 }

系統(tǒng)會自動拋出ArithmeticException異常:

Exception?in?thread?"main"java.lang.ArithmeticException:?/?by?zero

at?test.ExceptionTest.main(ExceptionTest.java:62)

再如:

1 public static voidmain(String[] args) {2 String s = "abc";3 System.out.println(Double.parseDouble(s));4 //function();

5 }

系統(tǒng)會自動拋出NumberFormatException異常:

Exception?in?thread?"main"java.lang.NumberFormatException:?For?input?string:?"abc"

at?sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)

at?java.lang.Double.parseDouble(Double.java:510)

at?test.ExceptionTest.main(ExceptionTest.java:62)

throw

throw是語句拋出一個異常

語法:throw(異常對象);

如:throw e;

一般會用于程序出現(xiàn)某種邏輯時程序員主動拋出某種特定類型的異常。如:

1 public static voidmain(String[] args) {2 String s = "abc";3 if(s.equals("abc")) {4 throw newNumberFormatException();5 } else{6 System.out.println(s);7 }8 //function();

9 }

會拋出異常:

Exception?in?thread?"main"java.lang.NumberFormatException

at?test.ExceptionTest.main(ExceptionTest.java:67)

throws

throws是方法可能拋出異常的聲明。(用在聲明方法時,表示該方法可能要拋出異常,允許聲明拋出多個異常,用逗號隔開)

語法:[(修飾符)](返回值類型)(方法名)([參數(shù)列表])[throws(異常類)]{......}

如:public?voidfunction()throws?Exception{......}

當某個方法可能會拋出某種異常時用于throws?聲明可能拋出的異常,然后交給上層調用它的方法程序處理。如:

1 public static void function() throwsNumberFormatException{2 String s = "abc";3 System.out.println(Double.parseDouble(s));4 }5

6 public static voidmain(String[] args) {7 try{8 function();9 } catch(NumberFormatException e) {10 System.err.println("非數(shù)據(jù)類型不能轉換。");11 //e.printStackTrace();

12 }13 }

處理結果如下:

非數(shù)據(jù)類型不能轉換。

throw與throws的比較

1、throws出現(xiàn)在方法函數(shù)頭;而throw出現(xiàn)在函數(shù)體

2、throws表示出現(xiàn)異常的一種可能性,并不一定會發(fā)生這些異常;throw則是拋出了異常,執(zhí)行throw則一定拋出了某種異常對象

3、兩者都是消極處理異常的方式(這里的消極并不是說這種方式不好),只是拋出或者可能拋出異常,但是不會由函數(shù)去處理異常,真正的處理異常由函數(shù)的上層調用處理

好的編程習慣:

1.在寫程序時,對可能會出現(xiàn)異常的部分通常要用try{...}catch{...}去捕捉它并對它進行處理

2.用try{...}catch{...}捕捉了異常之后一定要對在catch{...}中對其進行處理,那怕是最簡單的一句輸出語句,或棧輸入e.printStackTrace()

3.如果是捕捉IO輸入輸出流中的異常,一定要在try{...}catch{...}后加finally{...}把輸入輸出流關閉

4.如果在函數(shù)體內用throw拋出了某種異常,最好要在函數(shù)名中加throws拋異常聲明,然后交給調用它的上層函數(shù)進行處理

捕捉異常

先講捕捉異常

1 try{2 ……3 }catch(Exception e){4 ……5 }finally{6 ……7 }

try{……}中放置可能會發(fā)生異常的的語句塊,如可能出現(xiàn)異常的函數(shù),也可以是一般的程序語句;catch(){……}用于抓住異常,(Exception?e)中Exception是異常的類型,必須是Exception(Exception是所有異常類的父類)的子類。{}定義當出現(xiàn)異常時的處理方法。finally{……}表示不管異常是否發(fā)生,都得進行finally{}中的處理

在捕捉異常的try{...}語句塊中,如果出現(xiàn)了異常,則該語句(出現(xiàn)異常的語句)后的程序語句都不執(zhí)行,而是跳到catch{...}語句塊中執(zhí)行異常的處理。如:

1 public static void function1() throwsNumberFormatException{2 System.out.println(Double.parseDouble("abc"));3 System.out.println("第二條語句。");4

5 }6

7 public static voidmain(String[] args) {8 try{9 function1();10 } catch(Exception e) {11 System.err.println(e.getMessage());12 //e.printStackTrace();

13 }14 }

結果如下,只輸出了一條錯誤提示語:

For input string: "abc"

System.out.println("第二條語句。");未執(zhí)行。

如果一個函數(shù)沒有用throws進行拋異常,在調用該函數(shù)的方法也同樣可以捕捉異常。如:

1 public static voidfunction() {2 String s = "abc";3 System.out.println(Double.parseDouble(s));4 }5

6 public static voidmain(String[] args) {7 try{8 function();9 } catch(Exception e) {10 System.err.println("非數(shù)據(jù)類型不能轉換。");11 //e.printStackTrace();

12 }13 }

處理結果如下:

非數(shù)據(jù)類型不能轉換。

說明:某個函數(shù)或某段程序塊不管會不會,有沒可能拋出異常,都可以加try{...}catch{...}去捕捉它

自定義異常

用戶可以自定義異常,新建一個異常類,讓其繼承Exception類或Exception的某個子類。然后用throw拋出自己定義的異常類對象。

在進行程序開發(fā)的過程中,自定義異常遵循以下四個步驟:

1)首先創(chuàng)建自定義異常類,語法格式:自定義異常類名 extends Exception。

2)在方法中通過關鍵字throw拋出異常對象。

3)若是在當前拋出異常的方法中處理異常,可以用try-catch語句捕獲并處理;若不是,在方法的聲明處通過關鍵字throws指明要拋出給方法調用的異常。

4)在出現(xiàn)異常方法的調用中捕獲并處理異常

如:

1 packagepackageone;2

3 //自定義異常類

4 class MyException extendsException{5 publicMyException(String s){6 super(s);7 }8 }9

10 /*

11 * 設計類Number,類中有除法計算方法。使用自定義異常類12 */

13 classNumber{14 public int divition(int num1,int num2) throwsMyException {15 if (0==num2) {16 throw new MyException("分母不能為零!");17 }18 return (num1/num2);19 }20 }21 //測試自定義異常類

22 public classExceptionTest{23 public static voidmain(String[] args) {24 Number n = newNumber();25 try{26 System.out.println("自定義兩個數(shù)的商的結果為:"+n.divition(12, 0));27 } catch(MyException e) {28 System.out.println(e.getMessage());29 e.printStackTrace();30 }31 }32 }

處理結果如下:

總結

以上是生活随笔為你收集整理的java的throw_浅谈Java的throw与throws的全部內容,希望文章能夠幫你解決所遇到的問題。

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