请解释以下关于“无法找到符号”,“无法解析符号”或“符号未找到”的错误(在Java中):

它们是什么意思? 什么东西会引起它们? 程序员如何着手修复它们?

本问题旨在针对Java中常见的编译错误进行全面的问答。


当前回答

我也得到了这个错误。(我在谷歌上搜索了一下,然后转到了这个页面)

问题:我正在从另一个项目B中定义的类调用项目a的类中定义的静态方法。 我得到以下错误:

error: cannot find symbol

解决方案:我通过首先构建定义方法的项目,然后构建调用方法的项目来解决这个问题。

其他回答

“找不到”的意思是,编译器找不到合适的变量,方法,类等…如果你得到了错误提示,首先你要找到得到错误提示的代码行,然后你就可以在使用它之前找到哪个变量、方法或类没有定义。确认初始化该变量后,方法或类可以用于以后的需要…考虑下面的例子。

我将创建一个演示类并打印一个名称…

class demo{ 
      public static void main(String a[]){
             System.out.print(name);
      }
}

现在看看结果。

该错误说,“变量名找不到”..为name变量定义并初始化值可以消除该错误。

class demo{ 
      public static void main(String a[]){

             String name="smith";

             System.out.print(name);
      }
}

现在看看新的输出……

成功解决了这个错误..同时,如果你可以得到“找不到方法”或“找不到类”的东西,首先定义一个类或方法,然后使用它..

我也得到了这个错误。(我在谷歌上搜索了一下,然后转到了这个页面)

问题:我正在从另一个项目B中定义的类调用项目a的类中定义的静态方法。 我得到以下错误:

error: cannot find symbol

解决方案:我通过首先构建定义方法的项目,然后构建调用方法的项目来解决这个问题。

正如人们上面提到的,可能有各种各样的情况。有几件事帮助我解决了这个问题。

如果您正在使用IntelliJ 文件->“无效缓存/重新启动”

OR

被引用的类在另一个项目中,并且该依赖项没有添加到我的项目的Gradle构建文件中。所以我添加了依赖使用 编译项目(“:anotherProject”)

这招奏效了。HTH !

在Eclipse中获得此错误的一种方法是:

在src/test/java中定义一个类a。 在src/main/java中定义另一个使用类A的类B。

结果:Eclipse将编译代码,但maven将给出“无法找到符号”。

潜在原因:Eclipse为主树和测试树使用了一个组合的构建路径。不幸的是,它不支持为Eclipse项目的不同部分使用不同的构建路径,而这正是Maven所要求的。

解决方案:

不要那样定义你的依赖关系;也就是说,不要犯这样的错误。 定期使用Maven构建代码库,以便尽早发现这个错误。实现这一点的一种方法是使用CI服务器。

我们在一个Java项目中得到了一个错误,该项目被设置为Gradle多项目构建。结果发现其中一个子项目缺少Gradle Java Library插件。 这阻止了子项目的类文件对构建中的其他项目可见。

在将Java库插件添加到子项目的构建之后。用下面的方法Gradle,错误就消失了:

plugins {
    ...
    id 'java-library'
}