突然發現今天詩興大發,看來又得寫點內容了。
throw和throws對於Java程序員而言它們真的不是很陌生。但對於我這樣的選手而言一提到它們的區別和聯系就蒙圈了...
為了以后不蒙圈,今天就研究一下吧~~
如果有不足的地方歡迎批評指正...
1)throws
對於throws關鍵字而言一般用於拋出編譯時的異常,如果某個異常是編譯是異常,那么這個異常就需要捕獲(try{}catch{}finally{})
或者拋出(throws)。否者的話是無法通過編譯的。
這里再簡單講講二者的區別
對於try{}catch{}finally{}而言,相應的異常已經在程序里面捕獲。相應的catch中也已經處理了相關的異常,不會再向上拋出。上層
調用者是不需要進行任何處理的。
對於throws而言,當前程序不會對異常進行任何處理,如果出現異常的話,僅僅拋出而不做處理,對應的處理需要上層來負責。對應的
上層調用者必須處理這個異常或者繼續向上拋出對應的異常。
說白了以公司為例:
客戶給開發提了一個bug,如果開發人員能夠處理(try{}catch{}finally{}),就自己處理了,不會在告訴項目經
理。但是如果開發處理不了,開發就會找項目經理(開發的throws)如果項目經理能夠處理,就搞定(try{}catch{}finally{}),如果
搞不定 就找總經理(項目經理的throws)反正最終為題會被處理的(不敢不處理啊,客戶是上帝啊~~哈哈)
下面是一個throws的簡單例子:
package com.yonyou.test; import java.io.File; import java.io.FileInputStream; import java.io.IOException; /** * 測試類 * @author 小浩 * @創建日期 2015-3-2 */ public class Test{ public static void main(String[] args) throws IOException { File file=new File("C:\text.txt"); FileInputStream fis=new FileInputStream(file); byte []b=new byte[10]; while(fis.read(b)!=-1) { System.out.println(new String(b)); } } }
2)throw
對於throw而言一般是用在拋出一個異常對象,使用的不是很多。具體的看下面的例子:
package com.yonyou.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; /** * 測試類 * @author 小浩 * @創建日期 2015-3-2 */ public class Test{ public static void main(String[] args) throws MyException{ File file=new File("C:\text.txt"); FileInputStream fis; try { fis = new FileInputStream(file); byte []b=new byte[10]; while(fis.read(b)!=-1) { System.out.println(new String(b)); } } catch (IOException e) { //處理捕獲的異常,並拋出一個異常對象 throw new MyException("龍不吟,虎不嘯"); } } } /** * 自定義異常 * @author 小浩 * @創建日期 2015-3-2 */ class MyException extends Exception{ private static final long serialVersionUID = 1L; public MyException(String info){ super(info); } }
運行的結果為:
Exception in thread "main" com.yonyou.test.MyException: 龍不吟,虎不嘯 //用戶自定義的異常對象
at com.yonyou.test.Test.main(Test.java:27)
好吧今天就先到這里吧~~ See You