java告诉我找不到符号

时间:2014-04-06 12:18:59

标签: java

我自己正在研究核心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]},它无法找到符号。求你帮帮我。

3 个答案:

答案 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

的存在

What is a "variable scope"?

  

变量范围是指变量的可访问性。

     

规则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