我自己正在研究核心Java。我写了一个Java程序,我收到一个错误:
...找不到符号“refc”
但 已经被声明为对象引用...任何人都可以解释一下吗?
import java.io.*;
class contactmain {
int count = 0;
int[] a = new int[5];
contactmain() {
System.out.println("a");
a[count] = count+1;
count++;
}
}
class contact {
public static void main(String args[]) {
int y = 0;
int i = 0;
while (i<10) {
contactmain refc = new contactmain();//create the instance of that class
i++;
}
System.out.println(refc.a[i]);
}
}
在最后一个声明中,我收到一个错误{refc.a [i]},它无法找到符号。求你帮帮我。
答案 0 :(得分:4)
范围很重要,您在while(..){ }
内声明变量并尝试访问循环外部,将代码更改为:
while(i<10)
{
contactmain refc=new contactmain();
i++;
System.out.println(refc.a[i]);
}
答案 1 :(得分:1)
由于refc
范围仅限于while
。
要让它工作,您可以将System.out.println(refc.a[i]);
移到while
内,以便编译器知道refc
变量范围是指变量的可访问性。
规则1是只能访问块中定义的变量 从街区内。变量的范围是其中的块 它被定义了。
答案 2 :(得分:1)
问题是你在一个块中声明了contactmain refc,在这种情况下是一个while
块语句。这意味着这个引用只能在这个块的范围内使用(因为这个块有自己的内存堆栈,它们内部定义的所有内容都只能在那里使用)
你有
while(i<10)
{
contactmain refc=new contactmain();
i++;
}
您只能在其中使用System.out.println(refc.a[i]);
。如果要在块外使用此对象引用,则应在进入块之前声明它。例如:
contact main refc = null;
while(i<10)
{
refc=new contactmain();
i++;
}
System.out.println(refc.a[i]);
注意:使用小写进行命名是一种不好的做法。你应该选择Camel-Case。请参考:Variable scope | Naming conventions