一、內層方法丟擲異常,外層方法捕捉並處理異常:
public void methoda ()
catch(exceptiontype et)
}public void methodb throws exceptiontype
else
}在 這個例子中,方法b的頭部中宣告了該方法會丟擲乙個型別為exceptiontype的異常,在方法體中使用throw子句丟擲了乙個異常,那麼該異常被 誰捕捉到呢,答案是方法a。因為異常丟擲後,jvm會順著該方法的呼叫棧一層一層的往上找。因為方法a中有乙個 catch(exceptiontype et),所以被丟擲的異常會**捉到並處理。
二、方法中自己捕捉,處理異常:
public methoda()
catch (exceptiontype et)
}在這個例子中,方法a使用了try-catch語句塊,那麼意味著在方法中所產生的exceptiontype型別的異常都會**捉到並在方法內處理。
三、內層方法丟擲乙個異常,但本身又有try-catch
public methodb() throws exceptiontype
catch (anotherexceptiontype aet)
}在這個例子中有兩種異常處理情況,丟擲異常和捕捉異常,如果在try語句塊中產生exceptiontype型別的異常的話,會被丟擲。如果產生anotherexceptiontype型別的話,則不會被丟擲,因為在方法b的頭部中並沒有宣告會丟擲該異常。
四、內層方法丟擲乙個異常,但本身有try-finally
public methodb() throws exceptiontype
finally
}這個例子與上乙個例子很像,不同的是沒有catch,但增加了finally。它的意思如果方法b中try語句塊中如果產生了異常,則丟擲由外層方法處理。然後方法b繼續執行finally中的語句
下面列舉三種錯誤的異常處理方法:
一、內層方法丟擲乙個異常,但本身有捕捉這個異常
public methodb() throws exceptiontype
catch (exceptiontype et)
}在 這個例子中,方法b在頭部宣告了會丟擲乙個型別為exceptiontype的異常,但在緊接下來的方法體又用了 catch(exceptiontype et),如果產生了異常的話,會有什麼結果呢?方法b丟擲的異常馬上被自身的catch捕捉到,所以方法頭部的 throws實際是沒有作用的。外層方法是接收不到方法b丟擲的異常物件的。
二、在try中使用了return,在fianlly中又使用了return
public methodb()
catch ()
finally
}在這個例證中,我們可以看到在try中返回了somevalue,那麼程式執行到這裡是否就結束了呢,其實不是的,因為finally中的語句是肯定會被執行到的,所以最後返回的是somevalue_2;那麼意味者即使程式沒有丟擲異常,最後也得不到正確的結果。
三、把catch(exception e)放在所有catch塊的最前面
public methodb()
catch (exception e)
catch (subexception se)
}在 這個例子中,catch(exception e)被放在所有catch語句塊的最前面,因為exception所有exception型別的父類,所以 意味著所有在try中產生的異常都會**捉到。後面其他的catch都是沒有用的,所以一定要把catch(exception e)放在最後面,如果前 面所有的異常型別都不符合,至少保證還有乙個可以處理它。
總結:a.如果能夠找到乙個有意義的方法來捕獲異常,就立即引入這個方法
b.否則就應該考慮做某些處理後傳遞或者再次丟擲異常,也可以把異常轉換為另一種形式,然後丟擲乙個新的異常
c.另乙個方法是,可以完全忽略這個異常,而把它加到方法的頭部的throws語句中,由呼叫這個方法的方法來處理它
d.通過捕獲乙個公共的異常超類,可以在乙個塊裡面捕獲多個異常,但不能夠用乙個空的catch語句 塊來完全制止乙個異常。
J2SE 物件導向
public static void main string args throws exception 資料型別 容量從小到大基本型別 byte short char int long float double boolean不能相互轉換 容量小的自動轉換為大的 容量大的轉換為小的時需加上強制轉換...
執行緒 建立 J2SE
建立執行緒的兩種方法 第一種,定義執行緒,實現 runnable介面 public class testthread1 class runner1 implements runnable start runner1和main thread交替執行。run runner1先執行,main thread...
J2SE 利用Java函式畫曲線
給大家介紹幾個方法畫數學上的三角函式的方法 public class function extends jframe public function override public void paint graphics g private void drawtanx generalpath gp,...