Java中throw和throws的區別
系統自動丟擲的異常
所有系統定義的編譯和執行異常都可以由系統自動丟擲,稱為標準異常,並且 Java 強烈地要求應用程式進行完整的異常處理,給使用者友好的提示,或者修正後使程式繼續執行。
語句丟擲的異常
使用者程式自定義的異常和應用程式特定的異常,必須藉助於 throws 和 throw 語句來定義丟擲異常。
throw是語句丟擲一個異常。
語法:throw (異常物件);
throw e;
throws是方法可能丟擲異常的宣告。(用在宣告方法時,表示該方法可能要丟擲異常)
語法:[(修飾符)](返回值型別)(方法名)([引數列表])[throws(異常類)]{......}
public void doA(int a) throws Exception1,Exception3{......}
舉例:
throws E1,E2,E3只是告訴程式這個方法可能會丟擲這些異常,方法的呼叫者可能要處理這些異常,而這些異常E1,E2,E3可能是該函式體產生的。
throw則是明確了這個地方要丟擲這個異常。
如: void doA(int a) throws Exception1,Exception3{
try{
......
}catch(Exception1 e){
throw e;
}catch(Exception2 e){
System.out.println("出錯了!");
}
if(a!=b)
throw new Exception3("自定義異常");
}
程式碼塊中可能會產生3個異常,(Exception1,Exception2,Exception3)。
如果產生Exception1異常,則捕獲之後再丟擲,由該方法的呼叫者去處理。
如果產生Exception2異常,則該方法自己處理了(即System.out.println("出錯了!");)。所以該方法就不會再向外丟擲Exception2異常了,void doA() throws Exception1,Exception3 裡面的Exception2也就不用寫了。
而Exception3異常是該方法的某段邏輯出錯,程式設計師自己做了處理,在該段邏輯錯誤的情況下丟擲異常Exception3,則該方法的呼叫者也要處理此異常。
throw語句用在方法體內,表示丟擲異常,由方法體內的語句處理。
throws語句用在方法宣告後面,表示再丟擲異常,由該方法的呼叫者來處理。
throws主要是宣告這個方法會丟擲這種型別的異常,使它的呼叫者知道要捕獲這個異常。
throw是具體向外拋異常的動作,所以它是丟擲一個異常例項。
throws說明你有那個可能,傾向。
throw的話,那就是你把那個傾向變成真實的了。
同時:
1、throws出現在方法函式頭;而throw出現在函式體。
2、throws表示出現異常的一種可能性,並不一定會發生這些異常;throw則是丟擲了異常,執行throw則一定丟擲了某種異常。
3、兩者都是消極處理異常的方式(這裡的消極並不是說這種方式不好),只是丟擲或者可能丟擲異常,但是不會由函式去處理異常,真正的處理異常由函式的上層呼叫處理。
相關文章
- throw和throws的區別
- Java中異常分類和Throw和Throws的區別Java
- Java異常十一:使用throw丟擲異常物件;throw和throws的區別Java物件
- 異常-throw的概述以及和throws的區別
- Java基礎:throw和throws的詳解Java
- Java異常機制關鍵字總結,及throws 和 throw 的區別Java
- 異常處理機制(一)之throw與throws的區別
- Java之try-catch和throws的區別Java
- Java 建立使用者異常類、將異常一直向上拋、 throw和throws的區別Java
- java 中equals和==的區別Java
- Java中equals和==的區別Java
- java中的==和equal的區別Java
- java中==和equlas區別Java
- Java中Vector和ArrayList的區別Java
- Java中 equals() 方法和 == 的區別Java
- 對於java中的"\"和"/" 區別Java
- 在java中“equals”和“==”的區別Java
- Java中堆和棧的區別Java
- JAVA 中interface 和 abstract 區別Java
- java中size()和length區別Java
- Java中Runnable和Thread的區別Javathread
- Java 中Thread 和Runnable的區別Javathread
- Java中volatile和synchronized的區別Javasynchronized
- Java中ArrayList和LinkedList區別Java
- JAVA中Get和Post請求的區別Java
- java中list、set和map 的區別(轉)Java
- 【Java】equals 和 == 的區別Java
- Java和Javascript的區別JavaScript
- java和html的區別JavaHTML
- 【Java面試】Mybatis中#{}和${}的區別是什麼?Java面試MyBatis
- 【Java面試】Spring中 BeanFactory和FactoryBean的區別Java面試SpringBean
- Java中HashMap和TreeMap的區別深入理解JavaHashMap
- Java中抽象類和介面的區別Java抽象
- Java中(==)與equals的區別Java
- mysql中!=和is not的區別MySql
- JavaScript中for in 和for of的區別JavaScript
- mysql中“ ‘ “和 “ ` “的區別MySql
- Js中for in 和for of的區別JS