在之前的學習中我們學過IO流,在IO流中使用字符緩衝流(BufferedReader bf =newBufferedReader(new FileReader("abc.txt"));)的時候除了需要導包意外,還需要進行拋異常:import java.io.IOException;
那麼這個異常是什麼,爲什麼要拋異常,拋異常能解決什麼問題呢,今天的學習以後,讓我對異常的用處有了瞭解.
在Java等面向對象的編程語言中,異常本身是一個類,產生異常就是創建異常對象並拋出了一個異常對象。Java處理異常的方式是中斷處理。
異常的根類是Throwable,其下有兩個子類:Error與Exception,平常所說的異常指Exception.
1,嚴重錯誤Error,無法通過處理的錯誤
2,編譯時異常Exception,編譯時無法編譯通過。如日期格式化異常
3,運行時異常RuntimeException,是Exception的子類,運行時可能會報錯,可以不處理。如數學異常
在異常中主要想介紹一下自定義異常,因爲在工作中會經常需要自定義異常來爲其他同事使用.也可以更加精確的對所使用的異常進行詳細的描述.
由於許多異常在JDK中是直接可以進行拋出使用的,但是有很多實際與生活中相關的異常都需要我們自定義異常類,那麼java語言也爲我們提供了自定義異常的功能.
通過閱讀異常源代碼:發現java中所有的異常類,都是繼承Throwable,或者繼承Throwable的子類。這樣該異常纔可以被throw拋出。說明這個異常體系具備一個特有的特性:可拋性:即可以被throw關鍵字操作。並且查閱異常子類源碼,發現每個異常中都調用了父類的構造方法,把異常描述信息傳遞給了父類,讓父類幫我們進行異常信息的封裝。
那麼我們就通過一道例題來進行簡單的定義一個自己的異常,也就是自定義異常.
請用代碼實現如下需求:
1,寫一個方法實現獲取字符串某個索引上的字符的功能
2,寫一個測試測試方法調用上面寫的方法,使用thows方式進行處理異常,並在main方法中調用這個測試方法
3,再寫一個測試測試方法調用上面寫的方法,使用try...catch方式進行處理異常,並在main方法中調用這個測試方法
publicclass Test {
// 1. 獲取字符串某個索引上的字符的功能
publicstaticchar charAt(String str, intindex) throws Exception {
// 當字符串爲null拋出Exception("字符串不能爲null")異常,
if(null == str){
thrownew Exception("字符串不能爲null");
}
// 當字符串爲""的時候拋出 Excetion("字符串不能爲空")異常;
if(str.equals("")){
thrownew Exception("字符串不能爲空");
}
// 當index不在[0,str.length()-1] 之間的時,拋出Exception("索引越界") 異常.
if(index < 0 || index >= str.length()){
thrownew Exception("索引越界"+index);
}
// 否則返回str在index索引的字符
returnstr.charAt(index);
}
// 4.提供一個靜態的方法testThrows() 用於測試charAt(String,intindex)方法
publicstaticvoid testThrows() throws Exception{
charc;
// c = charAt(null, 0);
// c = charAt("", 0);
// c = charAt("abc",4);
c= charAt("abc",1);
System.out.println(c);
}
// 5.提供一個靜態方法testTryCatch(),用於測試charAt(String,intindex)方法
publicstaticvoid testTryCatch(){
// 在方法中調用charAt(String,int index)方法;
// i.注意需要測試每一種情況
// 使用try...catch方式對異常進行處理
try{
charc;
// c = charAt(null, 0);
// c = charAt("", 0);
// c = charAt("abc",4);
c= charAt("abc",1);
System.out.println(c);
}catch(Exceptione){
System.out.println("捕獲異常");
e.printStackTrace();
}
System.out.println("程序繼續");
}
publicstaticvoid main(String[] args) {
// 在main方法中,調用testThrows 方法.
// testThrows();
// 在main方法中,調用testTryCatch方法
testTryCatch();
}
}
在例題中呢,我們在寫完publicstaticchar charAt(String str, intindex){}系統會提示錯誤信息,這時候不要在意,
當我們定義好了異常,並且拋出異常的時候,這個錯誤信息就會去掉,強迫症的人別害怕,哈哈.
附一張經常用到的異常繼承關係圖