讀書——異常1

讀《JAVA編程思想》

今天學習了異常,其實從來沒有自己寫過異常,所以第一個問題,爲什麼需要異常,什麼時候用到異常。以我個人的感覺,一方面功能的貢獻者,來告訴使用者會有什麼樣的異常,讓他明白會有什麼問題,並且強制其捕獲;另一方面捕獲異常應該就是爲了讓整個程序執行完全進行下去,“把‘描述做什麼事’的代碼和‘出了問題怎麼辦’的代碼相分離”。這是目前我的體會。

具體使用,try,catch,finally這一系列關鍵字就不用具體講其具體意思了,throw這個關鍵自字還是第一次使用,這就是拋異常的動詞

  1. public void f() throws SimpleException {  
  2.           System.out.println("Throw SimpleException from f()");  
  3.           throw new SimpleException("hahah");  
  4.         }  
  5. SimpleException: hahah

一個是throw,一個是throws ,要注意啊!

自定義自己的異常。前面是自定義異常類的名字,後面是參數信息。至於像我們在編程中見到那些拋出的異常是怎麼形成的,要找個源碼看看,還沒有找到。

重新拋出異常和異常鏈主要描述了在異常嵌套中,如何不丟失最原始異常的位置,可以準確爆出這些信息

RuntimeException是不需要捕獲的,就是會報出我們日常操作錯誤出來的提示,你那是需要修改的錯誤,而不是捕獲其異常。

不知道爲什麼,異常信息出現的位置很隨機

 

  1. public class testxzxzc {
  2.     public static void f() throws xzxzc {
  3.         System.out.println("ren");
  4.         System.out.println("ren2");
  5.         throw new xzxzc();
  6.     }
  7.     public static void g() throws xzxzc {
  8.         System.out.println("ren1");
  9.         throw new xzxzc("dkjfk");
  10.     }
  11.     /**
  12.      * @param args
  13.      */
  14.     public static void main(String[] args) {
  15.         // TODO Auto-generated method stub
  16.         int x;
  17.         x=3/0;
  18.         try{f();}
  19.         catch(Exception e)
  20.         {
  21.             e.printStackTrace();
  22.         }
  23.         try{
  24.             g();
  25.         }catch(xzxzc e){
  26.             e.printStackTrace();
  27.         }
  28.     }
  29. }

出現的結果都不同,異常跟try塊中的內容不一定誰先顯示。

異常限制:異常說明本身並不屬於方法原型的一部分,方法原型是由方法的名字與參數的類型組成的,理解這一點非常有用。因此,你不能根據異常說明的不同來重載方法。此外,一個出現在基類方法的異常說明中的異常,不一定會出現在派生類方法的異常說明裏。換一句話說,在繼承和重載的過程中,方法的“異常說明的接口”不是變大了而是變小了。

異常從前面開始匹配,碰到第一能處理的塊,後面的就不執行了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章