BEAM (Checking Tool for Bugs Errors and Mistakes) 輸出報告 BEAM-messages,缺陷分級:ERROR > MISTAKE > WARNING。本文針對四大高頻錯誤模式(ERROR2、ERROR7、ERROR22、ERROR23)逐一剖析成因、代碼反例與修正策略,並補充編碼技巧。
最常見且隱蔽,導致 NullPointerException。五大典型場景:
if (a>0) str=...; str.charAt(0);)lengthstr[0] 或賦值synchronized(null)防禦策略:在無法確定對象非空時,使用前必判空(if (obj != null)),或採用 Objects.requireNonNull、註解 @NonNull 輔助靜態分析。
拋出 ArrayIndexOutOfBoundsException / IndexOutOfBoundsException。常見原因:
size() 作為索引(最後索引為 size-1)最佳實踐:雙重檢查——非空 + 索引邊界;優先使用 try-catch (IndexOutOfBoundsException) 兜底處理。
變量作除數且可能為零,拋出 ArithmeticException。核心原因:開發者假設變量經運算後非零,但存在未覆蓋路徑導致為零。
修正:除法前顯式判斷除數是否為零,並處理零值情況(拋出業務異常或返回預設值)。
Java GC 僅回收不可達對象,可達但無用對象導致洩漏,最終 OutOfMemoryError。典型模式:
put/add 無 remove 或清理不徹底readBuffer 僅擴不縮close()解決方案:
obj = null)remove 無用元素removeListenerfinalize() 輔助清理(不推薦作為主要手段)hasNext/nexts.length() >= 0、x >= MIN || x <= MAX(應為 &&)、final boolean = true 導致短路BEAM 以定理證明與符號執行極大降低誤報,輸出完整錯誤路徑與變量值,助力開發者精準定位隱性缺陷。養成防禦性編碼習慣,結合靜態分析,方能寫出高質量 Java 代碼。