回 帖 发 新 帖 刷新版面

主题:帮忙看一下,是不是这个错误

刚开始学习Java写了段小程序:
当这样写的时候:
class ArrayTest
{
     /*static*/ int []num1=new int[]{1,2,3};
     /*static*/ int []num2=new int[3];
    System.arraycopy(num1,0,num2,0,num1.length);
    public static void main(String[] args)
    {
        //System.arraycopy(num1,0,num2,0,num1.length);
        for(int i=0;i<num1.length;i++)
          {
        System.out.println(num2[i]);
           }    
    }
    
}
是有错误的,错误提示是:ArrayTest.java:5: <identifier> expected
        System.arraycopy(num1,0,num2,0,num1.length);
当我把上面的程序改成:
class ArrayTest
{
     static int []num1=new int[]{1,2,3};
     static int []num2=new int[3];
    //System.arraycopy(num1,0,num2,0,num1.length);
    public static void main(String[] args)
    {
        System.arraycopy(num1,0,num2,0,num1.length);
        for(int i=0;i<num1.length;i++)
          {
        System.out.println(num2[i]);
           }    
    }
    
}
这个样子,或者是
class ArrayTest
{
     static int []num1=new int[]{1,2,3};
     static int []num2=new int[3];
    //System.arraycopy(num1,0,num2,0,num1.length);
    public static void main(String[] args)
    {
               /*static*/ int []num1=new int[]{1,2,3};
          /*static*/ int []num2=new int[3];
          System.arraycopy(num1,0,num2,0,num1.length);
        for(int i=0;i<num1.length;i++)
          {
        System.out.println(num2[i]);
           }    
    }
    
}
这个样子的时候,就没有错误了.
出错的原因,是不是当程序运行的时候,先要进行main中去,但是当时入main的时候,num2
还没有进行处理,而引起的错误呀!
还请各位指点一下!

回复列表 (共4个回复)

沙发

JAVA应用程序的入口的确是main函数,不过我觉得你的程序的问题不是像你说的那样的,因为如果num2没处理的话,那它就会自动进行处理,而不会就引起错误,除非是处理不了。你第一个程序的问题应该是数组num1和num2是非静态的,main方法应该用不了。至于编译器没报错是因为还有其他的错误。你的错误,我觉得而已,arraycopy是不是只能在static方法内调用呢?

板凳

main()是一个静态函数

3 楼

静态方法调用的变量要提前初始化,所以你定义的数组应该是static的。

4 楼

今天登录账号,原来之前我有回答过这问题,并且回答得不伦不类的。也罢,现在来总结一下答案吧。
首先,你第一个的写法是有问题的,非过程内不能执行非声明性代码。所以System.arraycopy这句不应该放在那。其次,静态方法不能调用非静态成员。所以对于你的问题,你可以把数组声明为static的,或是用一个非静态方法来对它们进行操作。然后再在main方法内生成对象,并调用那个非静态方法。完毕!

我来回复

您尚未登录,请登录后再回复。点此登录或注册