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

1tu0hz3e  于 2022-09-16  发布在  Java
关注(0)|答案(18)|浏览(436)

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

  • 他们是什么意思?
  • 什么因素会导致这些问题?
  • 程序员如何着手修复它们?
  • 这个问题旨在对Java中常见的编译错误进行全面的问答*
q3qa4bjr

q3qa4bjr16#

解决

使用IntelliJ
选择构建->重建项目将解决此问题

cwxwcias

cwxwcias17#

“变量超出范围”的另一个示例

我已经见过这种问题好几次了,也许再举一个例子来说明什么是非法的,即使它可能感觉很好。
考虑以下代码:

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运算符,因此它必须依靠跟踪变量范围来确定变量何时不再使用(以及对这些变量的引用)。
如果你认为自己做了好事,那就更糟糕了。在“优化”代码后,我看到了这种错误,如下所示:

if(somethingIsTrue()) {
  String message = "Everything is fine";
  System.out.println(message);
} else {
  String message = "We have an error";
  System.out.println(message);
}

“哦,有重复的代码,让我们把这条公共线拉出来。”“>就这样。
处理此类作用域问题的最常见方法是将else值预先分配给作用域外部的变量名,然后在以下情况下重新分配:

String message = "We have an error";
if(somethingIsTrue()) {
  message = "Everything is fine";
} 
System.out.println(message);
gr8qqesn

gr8qqesn18#

如果您忘记new,也会出现此错误:

String s = String();

String s = new String();

因为没有E1D1E关键字的调用将尝试查找一个没有参数的(本地)方法String,并且该方法签名可能没有定义。

相关问题