第二章:簡單 Java 程式解析
第三章:變數與資料型態
第四章:運算子、運算式與敘述
第五章:選擇性敘述與迴圈
第十章:實例變數與函數、類別變數與函數
Powered By GitBook
自定義例外類別

複習

所有能夠處理的例外都是繼承 Exception 類別,因此我們自行設計的例外類別不外乎就是以下格式:
1
class 例外類別名稱 extends Exception
2
{
3
//自行定義
4
}
Copied!

範例

首先自行設計一圓形例外,因為內建的 Exception 擁有極豐富的函數,因此甚至我們能不撰寫敘述也能使用
1
class CircleException extends Exception
2
{
3
}
Copied!
在圓形類別當中,指定函數拋出例外(觀念複習 throws , new)
1
class CCircle
2
{
3
private double radius;
4
public void setRadius(double r) throws CCircleException
5
{
6
if(r<0)
7
{
8
throw new CircleException();
9
}
10
else
11
radius=r;
12
}
13
14
public void show()
15
{
16
System.out.println("面積="+3.14*radius*radius);
17
}
18
}
Copied!
並在main() 中撰寫 try-catch-finally 區塊(觀念複習 不同類別拋出例外)
1
try
2
{
3
CCircle.setRadius(-100.0);
4
}
5
catch(CircleException e)
6
{
7
System.out.println(e+" 被拋出");
8
}
Copied!

完整程式碼範例

1
class CircleException extends Exception
2
{
3
}
4
class CCircle
5
{
6
private double radius;
7
public void setRadius(double r) throws CircleException
8
{
9
if(r<0)
10
{
11
throw new CircleException();
12
}
13
else
14
radius=r;
15
}
16
17
public void show()
18
{
19
System.out.println("面積="+3.14*radius*radius);
20
}
21
}
22
23
public class exception_ex
24
{
25
public static void main(String args[])
26
{
27
CCircle cir=new CCircle();
28
try
29
{
30
cir.setRadius(-100.0);
31
}
32
catch(CircleException e)
33
{
34
System.out.println(e+" 被拋出");
35
}
36
cir.show();
37
}
38
}
Copied!
    1.
    自行撰寫例外類別。
    2.
    CCircle 類別為一個有判斷半徑的setRadius函數以及計算圓面積的函數 在判斷半徑的setRadius函數,我們指定之拋出例外;因此若半徑小於0時 將會拋出例外。
    3.
    在main() 函數中,撰寫了 try-catch-finally 區塊 用來接收例外。 (從不同類別的函數拋出例外)
在此範例,呼叫CCircle 中的setRadius 函數,傳入-100 的值 因此會拋出例外。 這時 catch 捕捉後會印出CircleException 被拋出,再執行最後的 cir.show();
此範例的輸出: CCircleException 被拋出 area=0.0

整理

Q:為什麼面積會是零呢?
A:因為例外拋出後,就沒有再做後續的處理;因此面積沒有被計算到 所以就為0
Last modified 9mo ago