所有能夠處理的例外都是繼承 Exception 類別,因此我們自行設計的例外類別不外乎就是以下格式:
class 例外類別名稱 extends Exception{//自行定義}
首先自行設計一圓形例外,因為內建的 Exception 擁有極豐富的函數,因此甚至我們能不撰寫敘述也能使用
class CircleException extends Exception{}
在圓形類別當中,指定函數拋出例外(觀念複習 throws , new)
class CCircle{private double radius;public void setRadius(double r) throws CCircleException{if(r<0){throw new CircleException();}elseradius=r;}public void show(){System.out.println("面積="+3.14*radius*radius);}}
並在main() 中撰寫 try-catch-finally 區塊(觀念複習 不同類別拋出例外)
try{CCircle.setRadius(-100.0);}catch(CircleException e){System.out.println(e+" 被拋出");}
class CircleException extends Exception{}class CCircle{private double radius;public void setRadius(double r) throws CircleException{if(r<0){throw new CircleException();}elseradius=r;}public void show(){System.out.println("面積="+3.14*radius*radius);}}public class exception_ex{public static void main(String args[]){CCircle cir=new CCircle();try{cir.setRadius(-100.0);}catch(CircleException e){System.out.println(e+" 被拋出");}cir.show();}}
自行撰寫例外類別。
CCircle 類別為一個有判斷半徑的setRadius函數以及計算圓面積的函數 在判斷半徑的setRadius函數,我們指定之拋出例外;因此若半徑小於0時 將會拋出例外。
在main() 函數中,撰寫了 try-catch-finally 區塊 用來接收例外。 (從不同類別的函數拋出例外)
在此範例,呼叫CCircle 中的setRadius 函數,傳入-100 的值 因此會拋出例外。 這時 catch 捕捉後會印出CircleException 被拋出,再執行最後的 cir.show();
此範例的輸出: CCircleException 被拋出 area=0.0
Q:為什麼面積會是零呢?
A:因為例外拋出後,就沒有再做後續的處理;因此面積沒有被計算到 所以就為0