class ary{
     String x;     ary[] x = new ary[3];
     x[0] = new ary();//为何这里要实例化对象?既然上一步已经声明数组时这个类型的对象,为何还要一一实例化?}

解决方案 »

  1.   

    声明数组只是分配了内存空间,声明对象的类型说明这个内存空间里要放这中类型的对象。
    如果不通过x[0]=new ary();的方式往数组里填东西那这个数组就是空的啊。就好像给了3个篮子,声明只能放苹果。你往第一个篮子放了一个苹果一样。
    我是这么理解的,还望指点!
      

  2.   

    ary是一个类,是引用类型,而数组也是引用类型,引用类型都需要实例化
    你定义的是一个引用类型的数组,也就是x是一个引用的引用
    你第一次实例化的是数组,为这个数组分配了空间
    第二次实例化是为了这个数组中的下标为0的ary这个类型的对象分配空间
    如果你还要用x[1],x[2],也必须再实例一次
      

  3.   

    ary[] x = new ary[3];  //声明x为ary类型数组,只能装3个ary对像,
    x[0] = new ary();      //我看就是赋植,而任何对像使用前都要实例化,这不是实例化数组的元素,是实例化ary,然后赋给x[0]
      

  4.   

    声明数组只是在内存里申请一块连续的内存空间;就像你买房子一下买了5套房子;
    但是没有住人;给数组赋值的过程就像当于你住进房间了;另外 引用类型的数组不赋值里面存储的都是 null
    基本数据类型,譬如 int 不赋值存储的是 0;
    double float 不赋值默认存储的都是是 0.0。不知道你满意否??
      

  5.   

    声明一个数组,既为声明自然没有去实例化,仅仅声明了多个引用。
    单纯的引用可不能直接用,必须要new或者赋值才能指向具体的实例。
      

  6.   

    因为第一句话中构造的那个ary类型的数组对象,本身包含一组引用,那些引用所指向的对象需要用new ary()这样的语句来实例化
    换句话说,这几句话所做的就是:
    引用x指向ary[]类型的数组,而ary[]类型数组里每个元素又是一个ary类型的引用,并指向一个new ary()对象
      

  7.   

    如果直接用,会报错NullPointerException,原理我觉得是,没有实例化x【0】之前,指向的类存空间是空的。我不明白的是,为何java不能直接给这个数组空间指针的指向以后,把它自动初始化呢?(确切的说,指针说法不对的,是引用,但用指针感觉比较清晰。)既然已经声明了这个数组就是ary这种类型的对象的空间,为何java不能就直接设定好了,还要我们自己一一来做,这样做效率不就低了吗?
    以下的两段话很有帮助,对理解的很有帮助,但似乎还差一点点,距离我想的答案,呵呵。
    //第二次实例化是为了这个数组中的下标为0的ary这个类型的对象分配空间 
    //x[0] = new ary();      //我看就是赋植,而任何对像使用前都要实例化,这不是实例化数组的元素,是实例化ary,然后赋给x[0]    //我怀疑这一句话有问题,实例化ary而不是赋值,应该说还是实例化x【0】。
      

  8.   

    你的这一句代码ary[] x = new ary[3];这是在内存中开辟了一个空间给数组x,但是现在x是空的 并没有赋值  所以要给x的每一个索引赋值  第一个索引赋值是x[0] = new ary();  就是这样同样的 请看int型数组  
    int[] intArray = new int[3]; 
    intArray[0] = 5;//这句就类似x[0] = new ary();
      

  9.   


    基本类型,例如int的默认值是0,但对象类型的默认值是null,所以java直接设定好的ary[]数组中每个索引的默认值是null
    如果按照楼主所说,声明ary[]数组时,就把每个索引的默认值自动设定为新的ary()对象的话,其实是降低了效率,因为这样一来,开始的时候就产生了很多没有用的ary()对象,后来实例化的时候,新的有意义的对象被赋值给索引,旧的没有意义的对象被回收,之前做的就有点白忙活了
      

  10.   


    是正确的,    ary[] x = new ary[3]; 只是说明的需要定义一个长度为3的数组,但却并没有给数组的每一个元素赋值, x[0] = new ary();才真正的将 对象的索引赋值给了 x[0]
      

  11.   

    hmmm,lz可以想象一下这样的情况,声明如下变量
    ary y;
    然后不初始化,那么这个y可以直接使用吗?
    其实数组中也是一样的,数组的成员都是这样的为初始化的对象,要使用时当然也需要初始化咯
      

  12.   

     x[0] = new ary();怎么感觉有c++的味道!
      

  13.   

    ary[] x = new ary[3]; //这一句是从内存中要一块连续的空间,每个空间都是用来存储ary类型的变量。
    x[0] = new ary();//在你使用x[0]之前,这一句必须要,它的作用是创建一ary对象,并把指向它的引用给x[0]
      

  14.   


    ary[] x = new ary[3]; //买回来一个有3个抽屉(抽屉只能存放ary这种物体)的小柜子,给它起了个名字叫x.
    x[0] = new ary();     //买回来一个ary物体,把它放到小柜子x的第一个抽屉里面.
      

  15.   

    非常感谢同志们的回复!看了java编程思想后大致明白了。之所以给分给这几位,主要是我找的是理论答案,不是实际的举例。分数太少,实在难给。
    感谢大家支持!