Bitte erläutern Sie Folgendes zu den Fehlern „Symbol nicht gefunden“, „Symbol kann nicht aufgelöst werden“ oder „Symbol nicht gefunden“ (in Java):
Diese Frage zielt darauf ab, eine umfassende Frage und Antwort zu diesen häufigen Kompilierungsfehlern in Java bereitzustellen.
如果您忘记了
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
中的一个类。以下示例说明了不正确的变量作用域如何导致“找不到符号”错误: