请解释以下关于“找不到符号”、“无法解析符号”或“未找到符号”错误(在Java中):
q3qa4bjr16#
解决
使用IntelliJ选择构建->重建项目将解决此问题
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运算符,因此它必须依靠跟踪变量范围来确定变量何时不再使用(以及对这些变量的引用)。如果你认为自己做了好事,那就更糟糕了。在“优化”代码后,我看到了这种错误,如下所示:
message
{}
if
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);
gr8qqesn18#
如果您忘记new,也会出现此错误:
new
String s = String();
对
String s = new String();
因为没有E1D1E关键字的调用将尝试查找一个没有参数的(本地)方法String,并且该方法签名可能没有定义。
String
18条答案
按热度按时间q3qa4bjr16#
解决
使用IntelliJ
选择构建->重建项目将解决此问题
cwxwcias17#
“变量超出范围”的另一个示例
我已经见过这种问题好几次了,也许再举一个例子来说明什么是非法的,即使它可能感觉很好。
考虑以下代码:
这是无效代码。因为名为
message
的两个变量都不在其各自的范围之外可见-在本例中,这将是包围的括号{}
。您可能会说:“但是一个名为message的变量是以任何方式定义的-因此message*是在
if
之后定义的”。但你错了。
Java没有
free()
或delete
运算符,因此它必须依靠跟踪变量范围来确定变量何时不再使用(以及对这些变量的引用)。如果你认为自己做了好事,那就更糟糕了。在“优化”代码后,我看到了这种错误,如下所示:
“哦,有重复的代码,让我们把这条公共线拉出来。”“>就这样。
处理此类作用域问题的最常见方法是将else值预先分配给作用域外部的变量名,然后在以下情况下重新分配:
gr8qqesn18#
如果您忘记
new
,也会出现此错误:对
因为没有E1D1E关键字的调用将尝试查找一个没有参数的(本地)方法
String
,并且该方法签名可能没有定义。