讀《JAVA編程思想》
今天學習了異常,其實從來沒有自己寫過異常,所以第一個問題,爲什麼需要異常,什麼時候用到異常。以我個人的感覺,一方面功能的貢獻者,來告訴使用者會有什麼樣的異常,讓他明白會有什麼問題,並且強制其捕獲;另一方面捕獲異常應該就是爲了讓整個程序執行完全進行下去,“把‘描述做什麼事’的代碼和‘出了問題怎麼辦’的代碼相分離”。這是目前我的體會。
具體使用,try,catch,finally這一系列關鍵字就不用具體講其具體意思了,throw這個關鍵自字還是第一次使用,這就是拋異常的動詞
- public void f() throws SimpleException {
- System.out.println("Throw SimpleException from f()");
- throw new SimpleException("hahah");
- }
- SimpleException: hahah
一個是throw,一個是throws ,要注意啊!
自定義自己的異常。前面是自定義異常類的名字,後面是參數信息。至於像我們在編程中見到那些拋出的異常是怎麼形成的,要找個源碼看看,還沒有找到。
重新拋出異常和異常鏈主要描述了在異常嵌套中,如何不丟失最原始異常的位置,可以準確爆出這些信息
RuntimeException是不需要捕獲的,就是會報出我們日常操作錯誤出來的提示,你那是需要修改的錯誤,而不是捕獲其異常。
不知道爲什麼,異常信息出現的位置很隨機
- public class testxzxzc {
- public static void f() throws xzxzc {
- System.out.println("ren");
- System.out.println("ren2");
- throw new xzxzc();
- }
- public static void g() throws xzxzc {
- System.out.println("ren1");
- throw new xzxzc("dkjfk");
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int x;
- x=3/0;
- try{f();}
- catch(Exception e)
- {
- e.printStackTrace();
- }
- try{
- g();
- }catch(xzxzc e){
- e.printStackTrace();
- }
- }
- }
出現的結果都不同,異常跟try塊中的內容不一定誰先顯示。
異常限制:異常說明本身並不屬於方法原型的一部分,方法原型是由方法的名字與參數的類型組成的,理解這一點非常有用。因此,你不能根據異常說明的不同來重載方法。此外,一個出現在基類方法的異常說明中的異常,不一定會出現在派生類方法的異常說明裏。換一句話說,在繼承和重載的過程中,方法的“異常說明的接口”不是變大了而是變小了。
異常從前面開始匹配,碰到第一能處理的塊,後面的就不執行了