如何排查can not find symbol的编译错误
Can not find symbol意味着什么
首先,它是一个编译错误,意味着你的源代码有问题或者编译的方式有问题。
你的源代码有以下部分组成:
- 关键词:比如 true false class while等等
- 字面值:比如42 ’x’ 和 “Hi mum!” 等等
- 操作符和其他非字母数字符号:比如 + = { 等等
- 注释和空白格
一个cannot find symbol 报错就是关于标识符的。当你的代码编译时,编译器需要弄明白你你代码中每一个标识符的含义。而这类报错就意味着编译器不明白你代码指代的东西。
引起cannot findsymbol错误的原因
归根到底无非是因为编译器查找了所有标识符应该被定义的地方都找不到定义。有很多原因可以导致,常见的如下:
通用标识符
- 名字拼写错误:比如StringBiudler而不是StringBuilder。Java不会试图弥补糟糕的拼写或输入错误
- 大小写错误:比如stringBuilder而不是StringBuilder。所有的Java标识符是大小写敏感
- 下划线使用不正确:比如mystring和my_string是不同的(如果你严格按照Java的风格规则,你就能很大程度避免这类错误)
变量标识符
- 忘记声明变量
- 变量声明范围无法覆盖你尝试使用的点
方法名标识符
也许你试图引用一个继承的方法,而它却没在父/祖先类/接口中定义
类名标识符
- 忘记导入类
- 用了star 导入,但是该类却不在你导入的任何包中定义
- 忘记new关键字使用:比如Strings=String();
问题解决
通常问题可能是以上的几个原因导致。比如,也许你星号导入java.io.*并且尝试使用Files类(存在java.nio而不是java.io),其实你是想写File(存在java.io的类),根据以上几个原因综合分析。
这个应该是从别人的文章里看的。但笔记太久了,忘了从哪看的了。