早期建置問題:早期建置可能會失敗,導致 JAR 檔案缺少類別。如果您使用建置工具,通常會注意到此類失敗。然而,如果您從其他人那裡獲取 JAR 文件,您就依賴它們的正確建置並注意到錯誤。如果您懷疑這一點,請使用 tar -tvf 列出可疑 JAR 檔案的內容。
IDE 問題:人們報告過這樣的情況:他們的 IDE 出現混亂,並且 IDE 中的編譯器找不到存在的類別…或相反的情況。
如果 IDE 配置了錯誤的 JDK 版本,可能會發生這種情況。
如果 IDE 的快取與檔案系統不同步,則可能會發生這種情況。有一些 IDE 特定的方法可以解決這個問題。
這可能是 IDE 錯誤。例如,@Joel Costigliola 描述了 Eclipse 無法正確處理 Maven「測試」樹的場景:查看此答案。 (顯然這個特定的錯誤很久以前就被修復了。)
Android 問題:當您為Android 程式設計時,如果遇到與R 相關的「找不到符號」錯誤,請注意 R 符號由context.xml 檔案定義。檢查您的 context.xml 檔案是否正確且位於正確的位置,以及是否已產生/編譯對應的 R 類別檔案。請注意,Java 符號區分大小寫,因此對應的 XML id 也區分大小寫。
如果您忘記了
new
,您也會收到此錯誤:對比
因為沒有
new
關鍵字的呼叫將嘗試尋找不帶參數的名為String
的(本地)方法 - 並且該方法簽名可能未定義。 p>0。這些錯誤之間有什麼區別嗎?
不是真的。 「找不到符號」、「無法解析符號」和「找不到符號」都意味著同一件事。 (不同的Java編譯器是由不同的人寫的,不同的人用不同的措詞來表達同樣的事情。)
1。 「找不到符號」錯誤是什麼意思?
首先,這是一個編譯錯誤1。這意味著您的 Java 原始碼中存在問題,或您的編譯方式有問題。
您的 Java 原始碼包含以下內容:
class
、while
等。true
、false
、42
、'X'
和「嗨媽媽!」
。=
、{
等。Reader
、i
、toString
、processEquibalancedElephants
等。「找不到符號」錯誤與識別符有關。編譯程式碼時,編譯器需要計算程式碼中每個標識符的含義。
“找不到符號”錯誤意味著編譯器無法執行此操作。您的程式碼似乎引用了編譯器無法理解的內容。
2。什麼會導致「找不到符號」錯誤?
作為第一順序,只有一個原因。編譯器查看了應該定義標識符的所有位置,但找不到定義。這可能是由多種原因造成的。常見的有以下幾種:
對於一般識別碼:
StringBiulder
而不是StringBuilder
。 Java 不能也不會嘗試彌補錯誤的拼字或輸入錯誤。stringBuilder
而不是StringBuilder
。所有 Java 標識符都區分大小寫。mystring
和my_string
是不同的。 (如果你堅持 Java 風格規則,你將在很大程度上避免這個錯誤...)對於應引用變數的識別碼:
對於應該是方法或欄位名稱的識別碼:
也許您正在嘗試引用未在父/祖先類別或介面中聲明的繼承方法或欄位。
也許您正在嘗試引用您正在使用的類型中不存在(即尚未聲明)的方法或欄位;例如
"rope".push()
2 。也許您正在嘗試將方法用作字段,反之亦然;例如
"rope".length
或someArray.length()
。也許您錯誤地操作了數組而不是數組元素;例如
對於應該是類別名稱的識別碼:
也許您忘記導入該類別。
也許您使用了「星號」匯入,但該類別未在您匯入的任何套件中定義。
也許您忘記了一個
new
,如下所示:也許您正在嘗試匯入或以其他方式使用已在預設套件中聲明的類別;即沒有
package
語句的類別所在的位置。提示:了解套件。您應該只對由一個類別組成的簡單應用程式使用預設套件...或至少由一個 Java 原始檔組成。
對於類型或實例似乎不具有您期望它具有的成員(例如方法或欄位)的情況:
java.awt.List
而不是java.util.List
。問題通常是上述問題的組合。例如,也許您「明星」導入了
java.io.*
,然後嘗試使用Files
類別...它位於java.nio代码>而不是
java.io
。或者,也許您打算寫File
...,它是java.io
中的一個類別。以下範例說明了不正確的變數作用域如何導致「找不到符號」錯誤: