1、實驗要求
本實驗要求:以情人節送花為業務背景,體驗自定義異常以及異常處理機制。
1-1. 業務說明:
1-1.1. 本實驗以情人節送花為業務背景,女方提出送花需求,男方送出鮮花。
1-1.2. 當女方提出送花數超過男方可承受范圍(例如:100朵)時,需要拋出異常。
1-2. 創建工程並配置環境:
1-2.1. 限制1. 創建實驗工程,命名為:SE_JAVA_EXP_E038;
1-2.2. 限制2. 創建包,命名為:cn.campsg.java.experiment;
1-2.3. 限制3. 創建包,命名為:cn.campsg.java.experiment.exception。
1-3. 創建送花異常類:
1-3.1. 限制1. 在cn.campsg.java.experiment.exception 包中創建異常類:
1)異常類名:RoseException
1-3.2. 為異常類RoseException創建0參構造器:
1)在RoseException構造器內調用父類構造器。
1-3.3. 為異常類RoseException創建1參構造器(參數為字符串類型):
1)在RoseException構造器內調用父類1參構造器。
1-4. 創建送花業務類:
1-4.1. 限制1. 在cn.campsg.java.experiment包中創建送花業務類:
1)業務類類名:Rose
1-4.2. 為類Rose創建私有屬性:
1)男方鮮花持有數:int total;
1-4.3. 為類Rose創建0參構造器:
1-4.4. 為類Rose創建1參構造器:
1)在構造器內對total屬性賦值:鮮花持有數 = 構造器參數值。
1-4.5. 為Rose類創建如下方法:
訪問權限 |
方法名稱 |
返回值 |
方法參數 |
參數說明 |
方法說明 |
public |
giveRose |
void |
int num |
送花數量 |
模擬“送花” |
1)該方法用於模擬男方向女方送花。
1-4.6. 送花業務邏輯描述如下:
1)當送花需求(參數)小於1時,方法輸出以下信息提示錯誤:
“送花的數量不正確:數量不能小於1!”
2)當送花需求(參數)大於男方的鮮花持有數(total)時,方法拋出異常;
異常為:RoseException,錯誤信息:"沒錢買" + num + "支玫瑰花"
3)當有送花需求時,男方鮮花已經送完(total = 0),方法拋出異常;
異常為:RoseException,錯誤信息:"沒錢買" + num + "支玫瑰花"
4)當送花需求(參數)小於等於男方的鮮花持有數(total)時,輸出如下信息:
"親愛的,送你" + 送花數量 + "朵玫瑰花!"
5)同時更新男方的鮮花持有數(total):total = total - num。
1-5. 顯示送花的結果:
1-5.1. 限制1. 在cn.campsg.java.experiment包中創建主類:MainClass;
1-5.2. 為MainClass創建入口主方法:main;
1-5.3. 在main中,調用Rose的1參構造器創建1個Rose對象;
1-5.4. 提示用戶輸入送花數量,提示信息:你想送女朋友多少朵玫瑰(數字):
1-5.5. 接收用戶輸入的送花數;
1-5.6. 在main中,執行送花操作並捕獲送花時可能出現的異常;
1-5.7. 確保送花操作無論是否成功都顯示:無論如何,我都是愛你的。
2、實現思路
2-1. 創建工程並配置環境。
2-2. 創建送花異常類:
2-2.1. 在cn.campsg.java.experiment.exception 包中創建異常類:
1)異常類名:RoseException
2-2.2. 為RoseException類創建0參構造器:
1)在RoseException構造器內調用父類0參構造器。
2-2.3. 為RoseException類創建1參構造器,其形式如下:
+提示 public RoseException(String msg){ } |
1)在構造器內調用父類的1參構造器:super(msg);
2-3. 創建送花業務類:
2-3.1. 在cn.campsg.java.experiment包中創建送花業務類Rose;
2-3.2. 為Rose類創建私有屬性,男方鮮花持有數:int total;
2-3.3. 為Rose類創建0參構造器;
2-3.4. 為Rose類創建1參構造器,其形式如下:
+提示 public Rose (int total){ } |
1)在構造器內為屬性total賦值:total = total - num。
2-3.5. 為Rose類創建送花方法:giveRose並申明自定義異常,其形式如下:
+提示 public void giveRose(int num) throws RoseException { } |
2-3.6. giveRose方法業務邏輯如下;
1)當送花需求(參數)小於1時,方法輸出以下信息提示錯誤:
“送花的數量不正確:數量不能小於1!”
2)當送花需求(參數)大於男方的鮮花持有數(total)時,方法拋出異常;
異常為:RoseException,錯誤信息:"沒錢買" + num + "支玫瑰花"
3)當有送花需求時,男方鮮花已經送完(total = 0),方法拋出異常;
異常為:RoseException,錯誤信息:"沒錢買" + num + "支玫瑰花"
+ 提示 if (total <= 0 || num > total) throw new RoseException("沒錢買" + num + "支玫瑰花"); |
4)當送花需求(參數)小於等於男方的鮮花持有數(total)時,輸出如下信息:
"親愛的,送你" + num + "朵玫瑰花!"
5)同時更新男方的鮮花持有數(total):total = total - num。
+ 提示 System.out.println("親愛的,送你" + num + "朵玫瑰花!"); this.total -= num; |
2-4. 顯示送花的結果:
2-4.1. 在包cn.campsg.java.experiment中創建業務主類:MainClass;
2-4.2. 在MainClass中定義主方法:main;
2-4.3. 接收用戶輸入的送花數:
1) 要求用戶輸入送花數,提示語句:你想送女朋友多少朵玫瑰(數字):。
2)創建Scanner對象,設置參數:System.in:
+ 提示 Scanner in = new Scanner(System.in); |
3)調用Scanner的nextInt方法獲取用戶輸入的送花數。
2-4.4. 在main方法中,創建Rose對象並初始化男方擁有100多鮮花:
+ 提示 Rose rose = new Rose(100); |
2-4.5. 在main中,執行送花操作並捕獲送花時可能出現的異常:
1)調用rose的giveRose函數,並傳入用戶輸入的鮮花數;
2)捕捉giveRose函數可能拋出的RoseException。
3)在catch塊中打印RoseException對象中的錯誤信息。
2-4.6. 增加finally塊,在finally塊中向控制台輸出:無論如何,我都是愛你的。
+ 提示 try { // 獲取用戶輸入的玫瑰花 int num = scan.nextInt(); // 開始送花 rose.giveRose(num); } catch (RoseException e) { System.out.println(e.getMessage()); } finally { scan.close(); System.out.println("無論如何,我都是愛你的!\n"); } |
3、驗證與測試
3-1. 在工程中定位主類MainClass。
3-2. 右鍵點擊MainClass類,依次選擇:Run As->Java Application。
3-3. 運行程序,查看輸出結果是否符合預期。

1 package cn.campsg.java.experiment.exception; 2 3 public class RoseException extends Exception { 4 5 public RoseException() {}//2-3.2 0參構造器 6 public RoseException(String msg){ 7 super(msg); 8 } 9 }

1 package cn.campsg.java.experiment; 2 import cn.campsg.java.experiment.exception.RoseException; 3 4 public class Rose { 5 6 private int total; 7 public Rose() {} 8 public Rose (int total){ 9 this.total = total ; 10 } 11 12 public void giveRose(int num) throws RoseException { 13 if(num < 1) { 14 System.out.println("送花的數量不正確:數量不能小於1!"); 15 } 16 else if (total<= 0||num>total) 17 { 18 throw new RoseException("沒錢買" + num + "支玫瑰花"); 19 } 20 System.out.println("親愛的,送你" + num + "朵玫瑰花!"); 21 this.total -= num; 22 } 23 }

1 package cn.campsg.java.experiment; 2 import cn.campsg.java.experiment.exception.RoseException; 3 4 import java.util.Scanner; 5 6 public class MainClass { 7 public static void main (String gras[]) { 8 System.out.println("你想送女朋友多少朵玫瑰(數字):"); 9 Scanner in = new Scanner(System.in); 10 Rose rose = new Rose(100); 11 try { 12 int num = in.nextInt(); 13 rose.giveRose(num); 14 } 15 catch (RoseException e) { 16 System.out.println(e.getMessage()); 17 } 18 finally { 19 in.close(); 20 System.out.println("無論如何,我都是愛你的!\n"); 21 } 22 } 23 }