JAVA上的数组问题

最近在自学JAVA,关于数组上碰到了点难题,请大家帮帮忙解释一下。

首先创建数组, Students[] stu = new Students[5];
然后我给数组赋值, stu[0]=90;
stu[1]=100;
.....
问:我上面的给数组赋值是不是叫实例化?
和stu[0]=new Students();有什么区别?
stu[0]=new Students();又有什么含义和定义?

首先,数组赋值不叫实例化,其实实例也叫做对象,实例化就是创建出这个对象
Students[] stu = new Students[5];
这句就是实例化,但这句话只是在内存堆中为这个对象划出相应的空间,而这个空间里是什么都没有的,也就是我们所说的NULL。这是因为在创建实例的时候JVM(虚拟机)会初始化该类,它有个加载类的过程,会将该类中的成员变量初始化,而上面中的stu是一个Students类的数组,它里面只能放Students类的对象,而对象是属于引用类型的,所以是NULL。

stu[0]=90;
stu[1]=100;
而这两句叫做赋值,这才是为数组中的元素赋值。
当然你这样写肯定不是你要表达的意思,学生等于一个数?

stu[0]=new Students();
这句话表达的意思就是,为数组第一个元素(Students类的一个对象)在内存中开辟空间,这句话执行完以后,内存中将会有一个Students类的一个对象,但这个对象是NULL。

其实new这个关键字就起在内存中开辟空间的意思,而Students()这个方法叫做构造,如果你在Students这个类里面没写这个方法,JVM(虚拟机)在加载这个类的时候会自动为你添加这个构造方法,它的作用就是为这个类里的所有成员变量初始化。

Students[] stu = new Students[5];和stu[0]=new Students();的区别:
Students[] stu = new Students[5];是创建了一个对象数组空间,用来存放这个对象的,它里面只能存放Students这个类的对象,你放别的进去肯定是错的。
而stu[0]=new Students();是创建一个Students对象的,它其实是等价于
Students s=new Students();
stu[0]=s;
完成了两个步骤,先将这个对象创建出来,然后放入stu数组中的第一个位置去。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-23
Students[] stu = new Students[5];这一步叫实例化,实例化是只在内存中给对象分配一个存储空间,不是指赋值。
Students[] stu = new Students[5];你在这一步指定了数组的类型是Students的,也就是说数组中只能存放Students的实例。stu[0]=90;stu[1]=100;
你这两部操作,是编译通不过的,你在一个Students类型的数组中存放了int型的变量,java不允许。
stu[0]=new Students();这句话是指你创建了一个Students类的实例,然后存放在了数组stu中。本回答被网友采纳
第2个回答  2011-04-23
首先,楼主必须要明确,数组是一种数据类型
类也是一种数据类型
比如Student 就是一个自定义的数据类型, Student[]这个是一个数组类型,两者是不等价的
Student[] students=new Student[5];
这里你声明了一个Student类型的长度是5的数组,这个数组里面只能装Student类型的数据
也就是说,这个数组里面只可以存在Student,由于这里你没有对数组里面的元素进行初始化,那么数组默认对引用类型的初始化的值就是null
类似这样:Student[] students={null,null,null,null,null};
这时候,由于数组元素都没有进行实例化,所以,你必须要进行实例化
students[0]=new Student();
这个的意思就是创造了一个Student类型的数据,并装入数组的第一个元素位
引用类型的数据都是在堆上开辟空间,如果是null值,则是未开辟空间,这时候,这个类型的数据实际上是不存在的,也就是空指针,如果你直接使用他的字段,会抛空指针异常
第3个回答  2011-04-23
Students[] stu = new Students[5];
是对数组本身实例化;
stu[0]=new Students();是对数组中的元素实例化。

new Students();会在堆上生成一个对象,消耗一个对象的空间;
stu[0]是对象的一个引用,一个引用消耗的空间就是一个Int数据,很小的,;
stu[0]=XXX 表示的是让这个引用指向XXX对象。
第4个回答  2011-04-23
1、这不是叫实例化,写法是错的,一个Students数组不能直接接受一个整数值。这表示创建好的数组可以存放Students的实例,即可以存放new Students()出来的东西
2、这个叫实例化,
3、当一类实例化后,就可以访问这个类中定义的相关属性与方法了,使用方式为:
stu[0].方法名()或stu[0].属性名
相似回答