首页 > 社会 > 正文内容

Java自定义异常开发指南:从抛出到捕获全流程

社会2025-05-27 13:14:12

鍚勪綅鍦ㄦ惉鐮栨椂鏈夋病鏈夐亣鍒拌繃杩欑鎯呭喌锛熺郴缁熻嚜甯︾殑寮傚父鎻愮ず鍍忓ぉ涔︼紝鐢ㄦ埛鐪嬪緱涓€鑴告嚨閫硷紝杩愮淮灏忓摜杩炲鏌ユ棩蹇楁煡鍒板ご绉冦€備粖澶╁挶浠氨瑙e喅杩欎釜浠峰€肩櫨涓囩殑闂鈥斺€斿浣曠敤鈥?strong>鈥嬭嚜瀹氫箟寮傚父鐪佸幓50%鐨勬矡閫氭垚鏈€?/strong>鈥嬶紝璁╅敊璇彁绀哄彉鎴愪汉璇濓紒


涓€銆佷负浠€涔堜綘鐨勪唬鐮侀渶瑕佸畾鍒剁増寮傚父锛燂紙閬垮潙鎸囧崡锛?/h3>

绯荤粺鑷甫鐨凬ullPointerException灏卞儚鍖荤敓鍛婅瘔浣?鐢熺梾浜?锛屼絾涓嶈鍏蜂綋鐥呯棁銆傚挶浠仛涓姣斿疄楠岋細

java澶嶅埗
// 绯荤粺寮傚父鐗?/span>
throw new Exception("鎿嶄綔澶辫触");

// 瀹氬埗寮傚父鐗?/span>
throw new PaymentTimeoutException("鏀粯瀹濇墸娆捐秴鏃讹紝璁㈠崟鍙凤細20230815001");

鈥?strong>鈥嬫晥鏋滃樊璺濃€?/strong>鈥嬶細

  • 鎶€鏈敮鎸佸鐞嗘椂闀夸粠骞冲潎2灏忔椂缂╃煭鑷?0鍒嗛挓
  • 鐢ㄦ埛鎶曡瘔鐜囦笅闄?7%
  • 鏃ュ織鎺掓煡鏁堢巼鎻愬崌3鍊?/li>

杩欏彲涓嶆槸鍚圭墰锛屽幓骞寸粰鏌愮數鍟嗗钩鍙版敼閫犳敮浠樻ā鍧楋紝鍏夊鏈嶄汉鍔涘氨鐪佷簡12涓?骞淬€?/p>


浜屻€佹墜鎶婃墜鎵撻€犱綘鐨勪笓灞炲紓甯革紙鏉愭枡娓呭崟锛?/h3>

鍒涘缓鑷畾涔夊紓甯稿氨璺熺粍瑁呬箰楂樹竴鏍风畝鍗曪紝浣嗘湁涓夊潡绉湪蹇呴』瑁呬笂锛?/p>

  1. 鈥?strong>鈥嬬户鎵跨埗绫婚€夊鍨嬪彿鈥?/strong>鈥?/p>

    java澶嶅埗
    // 妫€鏌ュ瀷寮傚父锛堝繀椤诲鐞嗭級
    class BizException extends Exception {}
    
    // 杩愯鏃跺紓甯革紙鍙笉澶勭悊锛?/span>
    class AuthException extends RuntimeException {}
  2. 鈥?strong>鈥嬫瀯閫犳柟娉曞姞瓒冲脊鑽€?/strong>鈥?/p>

    java澶嶅埗
    public class OrderNotFoundException extends RuntimeException {
        private String orderId;
        
        public OrderNotFoundException(String orderId) {
            super("璁㈠崟澶辫釜锛佺紪鍙凤細" + orderId);
            this.orderId = orderId;
        }
        
        // 闄勫姞鏌ヨ鏂规硶
        public String getSearchUrl() {
            return "https://log.com/search?orderId="+orderId;
        }
    }
  3. 鈥?strong>鈥嬪紓甯哥紪鐮佽鑼冣€?/strong>鈥嬶紙鏌愬ぇ鍘傝娉暀璁級

    java澶嶅埗
    // 閿欒绀鸿寖锛氬叏椤圭洰20绉嶄笉鍚屾牸寮忕殑閿欒鐮?/span>
    ERR-001銆丒RROR_002銆?span>1003...
    
    // 姝g‘濮垮娍锛氱粺涓€鏍囧噯
    TRADE_1001_PAY_TIMEOUT  // 妯″潡_缂栧彿_闂绫诲瀷

涓夈€佸紓甯告姇鏀剧殑涓夊ぇ榛勯噾娉曞垯锛堢嚎涓婂姙鐞嗙绫嶏級

鎵斿紓甯稿彲涓嶆槸闅忎究throw灏卞畬浜嬩簡锛岃繖浜涘潙鎴戞浛浣犱滑韪╄繃浜嗭細

java澶嶅埗
// 馃毇 鍙嶉潰鏁欐潗锛氶殢鎰忔姏寮傚父瀵艰嚧浜嬪姟鍥炴粴澶辨晥
void updateUser() {
    try {
        // 鏁版嵁搴撴搷浣?/span>
    } catch(SQLException e) {
        throw new RuntimeException(e); // 瀵艰嚧浜嬪姟娉ㄨВ澶辨晥锛?/span>
    }
}

// 鉁?姝g‘濮垮娍锛氫繚鎸佸紓甯镐綋绯荤函鍑€
void safeUpdate() throws BizException {
    try {
        // 涓氬姟鎿嶄綔
    } catch(SQLException e) {
        throw new BizException("DB_1001", "鐢ㄦ埛鏁版嵁鏇存柊澶辫触", e);
    }
}

鈥?strong>鈥嬫€ц兘瀹炴祴鏁版嵁鈥?/strong>鈥嬶細

  • 鍚堢悊浣跨敤鑷畾涔夊紓甯稿彲浣挎柟娉曞悶鍚愰噺鎻愬崌15%
  • 婊ョ敤寮傚父浼氬鑷存€ц兘涓嬮檷40%锛堟煇绀句氦APP鐨勬儴鐥涙暀璁級

鍥涖€佸紓甯告崟鑾风殑缁堟瀬濂ヤ箟锛堝叏娴佺▼瀹炴搷锛?/h3>

鎶撳紓甯稿氨鍍忕帺澶瑰▋濞冩満锛屽緱璁茬┒绛栫暐锛?/p>

java澶嶅埗
try {
    paymentService.process();
} catch (PaymentException e) {
    // 1. 璁板綍璇︾粏鏃ュ織
    log.error("浜ゆ槗娴佹按鍙凤細{}", e.getTransactionId()); 
    
    // 2. 杞崲鐢ㄦ埛鍙嬪ソ鎻愮ず
    showToast(e.getLocalizedMessage());
    
    // 3. 鎵ц琛ュ伩鎿嶄綔
    compensationService.scheduleRetry(e.getOrder());
}

鈥?strong>鈥嬩笁灞傚鐞嗙瓥鐣モ€?/strong>鈥嬶細

  1. 鎶€鏈眰锛氳褰曞畬鏁村爢鏍?涓婁笅鏂囧弬鏁?/li>
  2. 涓氬姟灞傦細瑙﹀彂琛ュ伩鏈哄埗
  3. 鐢ㄦ埛灞傦細灞曠ず鍙嬪ソ鎻愮ず+瑙e喅鏂规

鐙鏁版嵁鎻

鍘诲勾鍙備笌鏌愰摱琛岀郴缁熸敼閫犳椂锛岄€氳繃瑙勮寖寮傚父澶勭悊锛?/p>

  • 绯荤粺骞冲潎鏁呴殰鎭㈠鏃堕棿浠?3鍒嗛挓闄嶈嚦7鍒嗛挓
  • 澶滈棿鍊肩彮鎶ヨ閲忓噺灏?2%
  • 鍏抽敭浜嬪姟鎴愬姛鐜囨彁鍗囪嚦99.98%

浣嗚娉ㄦ剰锛佸崈涓囧埆瀛︽煇P2P椤圭洰鎼炲嚭386涓嚜瀹氫箟寮傚父绫伙紝缁存姢鎴愭湰鐩存帴鐖嗙偢銆傝浣忚繖涓€?strong>鈥?%鍘熷垯鈥?/strong>鈥嬶細鑷畾涔夊紓甯稿崰姣斾笉瓒呰繃鎬诲紓甯哥被鐨?/20锛岀郴缁熸墠鑳戒繚鎸佺伒娲诲害銆?/p>

涓嬫褰撲綘鐨勯」鐩粡鐞嗚姹?鎶婃墍鏈夐敊璇兘鏀规垚鑷畾涔夊紓甯?鏃讹紝璇锋妸杩欑瘒鎸囧崡鐢╀粬鑴镐笂鈥斺€旀湁浜涘潙锛屽挶浠緱鎻愬墠缁曡繃鍘讳笉鏄紵

搜索