早期构建问题:早期构建可能会失败,导致 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 也区分大小写。
Android 上的其他符号错误可能是由于前面提到的原因造成的;例如缺少或不正确的依赖项、不正确的包名称、特定 API 版本中不存在的方法或字段、拼写/输入错误等等。
如果您忘记了
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
中的一个类。以下示例说明了不正确的变量作用域如何导致“找不到符号”错误: