首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 常見運行時異常大全:分類、原因與處理策略

     編輯:Java 相關知識

前言

運行時異常 (RuntimeException 及其子類) 不強制捕獲,但實際開發中佔異常總量 80%+。熟悉高頻異常、成因與防範,能大幅降低線上故障率。

高頻運行時異常分類表

異常類典型原因預防/處理
NullPointerException調用 null 對象方法/屬性、訪問 null 陣列元素非空判斷、Objects.requireNonNull、Optional、@NotNull 註解
ArrayIndexOutOfBoundsException陣列/列表索引 <0 或 ≥ length循環邊界檢查、List.get() 前驗證 size
ClassCastException強制轉型失敗,物件非目標類型實例轉型前 instanceof、泛型擦除導致的堆污染
IllegalArgumentException方法參數不合法(如負數、空字串)參數校驗、Preconditions.checkArgument、Bean Validation
NumberFormatException字串解析數字失敗(含空格、非數字字符)try-catch、正則預檢、NumberUtils.isParsable
ArithmeticException整數除以零、取模零除數非零檢查、BigDecimal 除法指定精度
IndexOutOfBoundsExceptionList/String/Buffer 索引越界同陣列越界
IllegalStateException對象狀態不支持當前操作(如 Iterator 已耗盡再 next)狀態機設計、檢查前置條件
UnsupportedOperationException調用不可選操作(如 Arrays.asList().add())查閱 API 文檔、用可變集合實現類
ConcurrentModificationException迭代過程中結構性修改集合用 Iterator.remove()、CopyOnWriteArrayList、流式處理
NoSuchElementException迭代器/Scanner 無下一元素時調用 next()先 hasNext() 再 next()
SecurityException違反安全管理器策略(Applet、簽名代碼)檢查權限配置、簽名

JVM/系統級運行時異常

異常場景應對
OutOfMemoryError堆/元空間/線程棧/直接記憶體耗盡調優 -Xmx、排查洩漏、堆轉儲分析
StackOverflowError遞歸過深、循環調用改迭代、增加 -Xss、尾遞歸優化
NoClassDefFoundError類編譯存在但運行時找不到(依賴缺失、類加載器隔離)檢查 classpath、打包插件、模組化依賴
ClassNotFoundException反射/類加載器動態載入失敗確認依賴、上下文類加載器
UnsatisfiedLinkErrorJNI 本地方法庫找不到配置 java.library.path、打包 so/dll
IncompatibleClassChangeError類結構變更未重編譯依賴者(如字段 static↔non-static)全量重編譯、Maven clean install

異常處理最佳實踐

  1. 原則:具體捕獲、及時處理、保留堆疊
    try {
        risky();
    } catch (NullPointerException | IllegalArgumentException e) {
        log.error("業務參數異常", e); // 保留堆疊
        throw new BizException("參數錯誤", e); // 包裝拋出
    }
  2. 避免吞噬異常:catch (Exception e) {} 絕對禁止
  3. 異常轉換:底層異常 (SQLException) → 業務異常 (BizException) → 統一異常處理器返回友好錯誤碼
  4. 防禦性編程:
    • 公共 API 入口嚴格校驗參數
    • 集合/陣列訪問前檢查大小
    • 使用 Optional 表達可為空語義
    • 併發場景用線程安全集合/鎖
  5. 監控告警:關鍵異常 (NPE, OOM, Timeout) 接入 APM (SkyWalking, Pinpoint) 告警

快速定位技巧

  • 堆疊信息**從下往上**看:最底層 Caused by 為根因
  • 關注「業務代碼行號」,忽略框架內部行
  • 線上問題:jstack 導出線程快照、jmap -histo:live 統計對象、arthas 熱點追蹤

總結

運行時異常雖不強制捕獲,卻是系統穩定性的最大殺手。建立「高頻異常清單 → 防禦性編程規範 → 統一異常處理體系 → 監控告警閉環」四層防線,將異常風險壓縮到最低。記住:**最好的異常處理是預防它發生**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved