Java 程序運行中突然停止,控制台輸出紅色異常堆疊信息(截圖不可見),初學者不知如何解讀與解決。
Caused by 鏈末端;NullPointerException(空指針)、ArrayIndexOutOfBoundsException(越界)、NumberFormatException(格式轉換)、ClassNotFoundException(類缺失)等直指問題類別。1. 複制完整堆疊到文本編輯器(便於搜索)
2. 搜索項目包名前綴(如 com.myproject)
3. 找到第一行包含項目代碼的堆疊幀
4. 在 IDE 中打開對應文件、行號
5. 結合異常類型分析該行代碼:
- NPE: 變量為 null 調用方法/訪問字段
- 索引越界: 索引 < 0 或 >= length/size
- 類轉換異常: 強轉類型不兼容
- SQL 異常: 語法錯誤、鎖超時、約束違反
6. 設置斷點調試,觀察運行時變量狀態
7. 單元測試覆蓋該路徑,回歸驗證修復
| 異常 | 典型原因 | 快速修復 |
|---|---|---|
| NullPointerException | 未初始化對象、Map.get 返回 null、鏈式調用中間為 null | 判空、Optional、@NotNull 註解 |
| ArrayIndexOutOfBoundsException | 循環邊界錯誤、split 結果長度不足直接取索引 | 修正循環條件、先判 length |
| NumberFormatException | 字符串含非數字字符、空串、格式不匹配 | 正則預校驗、try-catch、預設值 |
| ClassCastException | 集合泛型擦除導致運行時類型不符、父類轉子類失敗 | instanceof 守衛、泛型正確聲明 |
| StackOverflowError | 遞歸無終止條件、循環調用 | 檢查遞歸基線、改迭代 |
| OutOfMemoryError | 大對象、內存洩漏、堆太小 | 優化代碼、調大 -Xmx、排查洩漏 |
list.size() > 1000);Break on Exception,拋異常瞬間自動暫停;-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005;異常堆疊是程序留下的「現場指紋」。掌握從底層 Caused by 向上定位業務代碼行的閱讀習慣,結合 IDE 調試與單元測試,可將「程序崩了」轉化為「定位到第 42 行空指針,修復耗時 5 分鐘」的工程化過程。