學習 Java 過程中,初學者常會遇到一些重複性高、容易卡住的問題。本文整理了編譯、運行、邏輯三大類高頻錯誤,並給出針對性解決方案,助你快速跨過坑點。
現象:error: cannot find symbol
排查清單:
import 該類或其包CLASSPATH 環境變量是否正確(建議不設置或清空,改用 -cp 參數)com.example.Foo → com/example/Foo.class)public class 名稱一致(Java 強制要求)現象:Error: Could not find or load main class
解決要點:
java com.example.Main 而非 java Main.class)CLASSPATH 包含類文件的根目錄(包目錄的上一級).class 文件所在目錄的父目錄下執行 java 命令以下是新手極易犯的邏輯錯誤,建議對照自查:
| 錯誤類型 | 典型現象 | 正確做法 |
|---|---|---|
switch 缺少 break |
多個 case 連續執行 | 每個 case 結尾加 break,或有意穿透時加註釋 |
== 與 = 混淆 |
條件判斷變成賦值,永遠為 true | 比較用 ==,賦值用 =;習慣把常量寫左邊 if (0 == x) |
| 循環邊界錯誤 | 多跑一次或少跑一次 | 明確 < / <= / > / >=;邊界測試用 0、1、length-1、length |
| 數組索引從 0 開始 | ArrayIndexOutOfBoundsException |
標準寫法:for (int i = 0; i < arr.length; i++) |
浮點數用 == 比較 |
精度問題導致判斷失效 | 用 Math.abs(a - b) < epsilon 或 BigDecimal |
缺少大括號 { } |
縮進誤導,只有第一條語句在循環/判斷中 | 永遠加大括號,即使只有一句 |
&& / || 邏輯錯誤 |
短路特性導致副作用不執行 | 理解短路求值;需全執行時用 & / | |
過度使用 ! |
雙重否定難閱讀,易出錯 | 改用正向邏輯,如 if (!ready) → if (notReady) |
do-while 至少執行一次 |
條件不滿足時仍執行一次 | 確認業務是否允許「零次執行」,否則用 while |
| 試圖在方法中修改基本類型參數 | 實參值不變 | Java 是值傳遞;需返回新值或傳入對象/包裝類 |
| 分號誤放導致空語句 | for (...); { ... } 循環體不執行 |
控制語句後不加分號;養成加大括號習慣 |
System.out.println 高效得多。大多數「共同問題」其實都是基礎概念不清或習慣不佳導致。建立正確的編譯/運行心智模型,養成加大括號、不信任浮點 ==、閱讀堆疊等習慣,就能避開 80% 的坑。祝學習順利!