Java 開發過程中,編譯器與執行期拋出的錯誤訊息往往讓初學者感到困惑。本文系統整理 15 種最常見的 Java 錯誤類型,從「找不到符號」到「變數未初始化」,逐一提供錯誤範例、堆疊追蹤解讀、根本原因分析與修正方案,助你快速除錯、提升編碼品質。
典型場景:變數未宣告、方法呼叫缺少括號、未匯入套件、大小寫不匹配。
// 錯誤:average 未宣告型別
int a=3, b=4, c=20;
average = (a+b+c)/5.0; // 錯誤:cannot find symbol: variable average
// 修正:補上型別
double average = (a+b+c)/5.0;
方法呼叫忘加括號:
my_method; // 錯誤:視為變數
my_method(); // 正確
未匯入類別(如 `Scanner`):
import java.util.Scanner; // 或 java.util.*
大小寫敏感:`average` ≠ `Average`。
檔名必須與 public 類名完全一致(含大小寫)。
// Foo.java 中
public class Bar { ... } // 錯誤:class Bar is public, should be declared in a file named Bar.java
通常因大括號過多導致。善用 IDE 自動縮排(Ctrl+A → Tab)快速定位。
public class Test {
public static void main(String[] args) {
System.out.println("Hello!");
}
} } // 多一個右大括號
編譯器會精確指出行號與缺失字元(`{`、`}`、`;`、`]` 等)。
程式碼寫在方法外部,常因大括號錯位導致。
方法內出現非法語句,常因前一個方法未正確閉合大括號。
基本型別與物件無法直接轉換(如 `int` ↔ `String`)。
// 錯誤
int num = "500";
// 修正:使用包裝類轉換
int num = Integer.parseInt("500");
所有方法必須宣告回傳型別,無回傳值用 `void`。
合法範圍 `[0, length-1]`。常見於迴圈條件寫成 `i <= length`。
for (int i=0; i < arr.length; i++) // 正確用 < 而非 <=
合法範圍 `[0, length()-1]`。`substring(-1,3)`、`charAt(length())` 皆會拋出。
呼叫時引數個數、型別、順序必須與宣告一致。錯誤訊息會列出 `required` 與 `found` 對照。
非 void 方法所有執行路徑必須有 `return`。多重 `if` 需用 `else` 或最終 `return` 覆蓋所有分支。
將較大型別(`double`)賦值給較小型別(`int`)。若確認捨棄小數,可用強制轉型 `(int)3.14`。
類別或方法缺少閉合大括號。善用自動縮排找出縮排錯亂處。
`return`、`break`、`throw` 之後的程式碼永不會執行。調整順序或移除。
區域變數使用前必須賦值。條件分支賦值時,編譯器無法推斷所有路徑皆賦值,需用 `else` 確保。
熟悉這 15 大錯誤模式,能讓你從「看不懂錯誤訊息」進化為「一眼定位根因」,大幅縮短除錯時間,專注於業務邏輯實作。