iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0
JavaScript

大學以前只看過那隻貓?用白話文帶你從 Python 跨進 JavaScript系列 第 13 篇

【Day 13】官方炸彈詞不達意?教你自製專屬炸彈,給系統一張客製化驗屍報告

  • 分享至 

  • xImage
  •  

在前面三天,我們學會了用 try-catch 拆彈接招、用 throw 主動點火引爆,以及用 finally / try-with-resources 收拾殘局。
但在真實戰場上,你一定遇過這種尷尬場面:當使用者在提款機輸入領取 $5000,但帳戶餘額只剩 $3000,你想引爆炸彈中斷流程,這時 Java 官方工具箱裡能借你什麼?
用 IllegalArgumentException(參數不合法)?好像有點勉強,數字 5000 本身是個合法正數啊。
用 ArithmeticException(數學運算錯誤)?也不是除以零,公式沒算錯。
用最通用的 Exception?又太過含糊,包山包海包各種錯。

當官方的罐頭炸彈詞不達意時,我們就自己造一顆貼上專屬標籤的客製化炸彈!
這就是自訂例外(Custom Exception)!

  1. 自訂例外其實就是「認祖歸宗」去繼承!
    本質上就是寫一個普通的 Class,然後認 Exception 或 RuntimeException 當老爸!
    只要你的類別掛上繼承,它就擁有了「合法引爆系統」與「打包攜帶遺言」的超能力:

// 繼承 Exception:它就正式成為一顆具備合法身分的客製化炸彈!
public class InsufficientBalanceException extends Exception {

// 無參數建構子 1:不帶客製遺言的預設版
public InsufficientBalanceException() {
    super("帳戶餘額不足!"); // 呼叫父類別,交出公版遺言
}
//使用時機: 呼叫者throw new InsufficientBalanceException();new 出來的括號不帶字,子類別幫他做主,直接寫死的"帳戶餘額不足!" 塞給父類別,老爸一律幫你發「帳戶餘額不足!」的公告。

// 有參數建構子 2:讓引爆者自由填寫詳細死因的旗艦版
public InsufficientBalanceException(String message) {
    super(message); // 透過 super(message) 老爸會照單全收如實發布
    //使用時機: 呼叫者想把案發現場的數據交代清楚,括號裡帶入即時動態字串

throw new InsufficientBalanceException("領 5000 失敗,戶頭只剩 3000 元!");
你可以在引爆瞬間把現場發生的恩怨情仇(message)寫上去
}
}
這段程式碼背後的兩大精髓:
類別名稱就是炸彈型號(見名知意):
命名黃金法則永遠是「具體情境 + Exception」,例如 InsufficientBalanceException(餘額不足)、UserNotFoundException(查無此人)。隊友光看錯誤型號,不用看程式碼就知道出了什麼大事。

  1. 精準分流處理(炸彈客製化)
    「針對不同災情,丟出不同型號的炸彈」。
    在 try 區塊後面,你可以掛好幾個專門的捕狗網(catch):
    網子 A 只抓 OutOfStockException:一抓到,立刻發簡訊給倉管「快叫貨!」。
    網子 B 只抓 CardExpiredException:一抓到,彈出視窗跟客人說「請換張卡刷刷看~」。
    如果全用官方模糊的 Exception,系統就不知道現在到底是庫存沒了還是卡刷不過,只能彈出交易失敗,沒辦法對症下藥。
  2. 商業邏輯「一目了然」因為:光看名字就知道「誰該背鍋」
    在看日誌(Log)或看錯誤報告時,工程師能一秒分清楚這場意外是「工程師的鍋」還是「客人的問題」:
    看到官方炸彈(工程師的鍋):
    像是 NullPointerException(空指標)或 IndexOutOfBoundsException(陣列越界),代表程式碼寫爛了、系統出 Bug
    看到自訂炸彈(業務規格的正常防線):
    看到 InsufficientBalanceException,工程師會放心地說:「系統很健康!這不是 Bug,純粹是那個客人戶頭沒錢還硬要領錢,被我們的防護機制擋下來了。」
    一句話總結:它把「系統壞掉」跟「客人違規」分得清清楚楚,

上一篇
【Day 12】佔著茅坑不拉屎?別讓資源洩漏拖垮系統
下一篇
【Day 14】天災還是人禍?搞懂編譯器差別待遇的真相:Checked 與 Unchecked 派系對決
系列文
大學以前只看過那隻貓?用白話文帶你從 Python 跨進 JavaScript 共 15 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言