突然發現今天詩興大發,看來又得寫點內容了。
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
