class ary{
String x; ary[] x = new ary[3];
x[0] = new ary();//为何这里要实例化对象?既然上一步已经声明数组时这个类型的对象,为何还要一一实例化?}
String x; ary[] x = new ary[3];
x[0] = new ary();//为何这里要实例化对象?既然上一步已经声明数组时这个类型的对象,为何还要一一实例化?}
如果不通过x[0]=new ary();的方式往数组里填东西那这个数组就是空的啊。就好像给了3个篮子,声明只能放苹果。你往第一个篮子放了一个苹果一样。
我是这么理解的,还望指点!
你定义的是一个引用类型的数组,也就是x是一个引用的引用
你第一次实例化的是数组,为这个数组分配了空间
第二次实例化是为了这个数组中的下标为0的ary这个类型的对象分配空间
如果你还要用x[1],x[2],也必须再实例一次
x[0] = new ary(); //我看就是赋植,而任何对像使用前都要实例化,这不是实例化数组的元素,是实例化ary,然后赋给x[0]
但是没有住人;给数组赋值的过程就像当于你住进房间了;另外 引用类型的数组不赋值里面存储的都是 null
基本数据类型,譬如 int 不赋值存储的是 0;
double float 不赋值默认存储的都是是 0.0。不知道你满意否??
单纯的引用可不能直接用,必须要new或者赋值才能指向具体的实例。
换句话说,这几句话所做的就是:
引用x指向ary[]类型的数组,而ary[]类型数组里每个元素又是一个ary类型的引用,并指向一个new ary()对象
以下的两段话很有帮助,对理解的很有帮助,但似乎还差一点点,距离我想的答案,呵呵。
//第二次实例化是为了这个数组中的下标为0的ary这个类型的对象分配空间
//x[0] = new ary(); //我看就是赋植,而任何对像使用前都要实例化,这不是实例化数组的元素,是实例化ary,然后赋给x[0] //我怀疑这一句话有问题,实例化ary而不是赋值,应该说还是实例化x【0】。
int[] intArray = new int[3];
intArray[0] = 5;//这句就类似x[0] = new ary();
基本类型,例如int的默认值是0,但对象类型的默认值是null,所以java直接设定好的ary[]数组中每个索引的默认值是null
如果按照楼主所说,声明ary[]数组时,就把每个索引的默认值自动设定为新的ary()对象的话,其实是降低了效率,因为这样一来,开始的时候就产生了很多没有用的ary()对象,后来实例化的时候,新的有意义的对象被赋值给索引,旧的没有意义的对象被回收,之前做的就有点白忙活了
是正确的, ary[] x = new ary[3]; 只是说明的需要定义一个长度为3的数组,但却并没有给数组的每一个元素赋值, x[0] = new ary();才真正的将 对象的索引赋值给了 x[0]
ary y;
然后不初始化,那么这个y可以直接使用吗?
其实数组中也是一样的,数组的成员都是这样的为初始化的对象,要使用时当然也需要初始化咯
x[0] = new ary();//在你使用x[0]之前,这一句必须要,它的作用是创建一ary对象,并把指向它的引用给x[0]
ary[] x = new ary[3]; //买回来一个有3个抽屉(抽屉只能存放ary这种物体)的小柜子,给它起了个名字叫x.
x[0] = new ary(); //买回来一个ary物体,把它放到小柜子x的第一个抽屉里面.
感谢大家支持!