首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“找不到符号”或“无法解析符号”错误是什么意思?

“找不到符号”或“无法解析符号”错误是什么意思?
EN

Stack Overflow用户
提问于 2014-09-07 09:12:09
回答 16查看 1.2M关注 0票数 473

请解释以下有关“找不到symbol”、“无法解析symbol”或"Symbol not found“错误( Java):

  • 它们是什么意思?
  • 什么东西会导致它们?
  • 程序员如何修复它们?

这个问题旨在为Java中这些常见的编译错误提供一个全面的问答。

EN

回答 16

Stack Overflow用户

发布于 2015-04-17 16:50:13

如果你忘记了一个new,你也会得到这个错误

代码语言:javascript
运行
复制
String s = String();

对比

代码语言:javascript
运行
复制
String s = new String();

因为不带new关键字的调用将尝试查找不带参数、名为String的(本地)方法,而该方法签名很可能没有定义。

票数 31
EN

Stack Overflow用户

发布于 2015-12-06 17:19:56

'Variable is out of scope'的另一个示例

因为我已经看过几次这样的问题了,也许再举一个例子来说明什么是非法的,即使它可能感觉还可以。

考虑下面的代码:

代码语言:javascript
运行
复制
if(somethingIsTrue()) {
  String message = "Everything is fine";
} else {
  String message = "We have an error";
}
System.out.println(message);

这是无效的代码。因为两个名为message的变量都不会超出它们各自的作用域--在本例中就是周围的括号{}

您可能会说:“但是名为message的变量是以任何一种方式定义的-所以message是在if之后定义的”。

但你就错了。

Java没有free()delete操作符,所以它必须依靠跟踪变量作用域来找出何时不再使用变量(以及对这些原因变量的引用)。

如果你认为你做了好事,那就更糟了。我见过这样的“优化”代码后出现这样的错误:

代码语言:javascript
运行
复制
if(somethingIsTrue()) {
  String message = "Everything is fine";
  System.out.println(message);
} else {
  String message = "We have an error";
  System.out.println(message);
}

“哦,有重复的代码,让我们把这条公共代码去掉”->就是这样。

处理这种作用域问题的最常见方法是将else-value预先分配给外部作用域中的变量名,然后在if中重新赋值:

代码语言:javascript
运行
复制
String message = "We have an error";
if(somethingIsTrue()) {
  message = "Everything is fine";
} 
System.out.println(message);
票数 16
EN

Stack Overflow用户

发布于 2016-05-13 18:09:00

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

src/test/java.

  • Define中定义一个类A,在使用类的src/main/java中定义另一个类B

结果: Eclipse将编译代码,但maven将显示“找不到符号”。

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

解决方案:

Maven不要这样定义你的依赖关系;也就是说,不要让这个mistake.

  • Regularly使用来构建你的代码库,这样你就可以提早发现这个错误。其中一种方法是使用CI服务器。
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25706216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档