Java有关类数组的初始化问题

zzzZZZ305 2018-09-25 05:47:28
public class Test{
public static void main(String[] args){
Student[] stu = new Student[20];
for (int i = 0; i < stu.length; i++){
stu[i] = new Student();
.......
【完整代码如图】

为什么这部分(粗体)一定需要写呢?去掉后就会出错。

前面不是已经new Student[20]了吗,为什么还要在循环体中一个个new啊?
...全文
774 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Code_Noting 2018-10-18
  • 打赏
  • 举报
回复
还是要学会用debug来跟踪代码,看看具体是什么情况,debug可以解决99%的问题
玄玥 2018-10-18
  • 打赏
  • 举报
回复
对象实例化的理解,数组是一个对象,数组里边的每个元素又是一个对象,对象必须实例化才能使用。
可以理解为,必须给对象开辟一个空间来运算和调用。
就好像商场买菜你买了20个种类的东西,但是每个种类的单位,单价又有不同,类似的道理。
laohuxiaotu 2018-10-17
  • 打赏
  • 举报
回复
创建数组对象和创建实体类的对象是不一样的!
Warrior Monk 2018-10-15
  • 打赏
  • 举报
回复
Student[] stu = new Student[20];
这段代码等效于
List<Student> list = new ArrayList<Student>(20);

此时 数组内为 null 而不是Student对象
围观中
有梦想的小白 2018-10-15
  • 打赏
  • 举报
回复
new的动作其实就相当于在给这个变量分配一个内存空间,如果不给它分配内存空间就强行给这个变量赋值的话肯定是会NPE的,一切操作都得在已经分配内存空间的前提下去执行,否则都是没有意义的。
十八道胡同 2018-10-13
  • 打赏
  • 举报
回复
引用 6 楼 zhr305 的回复:
谢谢各位,可否理解为new Student[20]是创建了20个引用呢?



是开了一个数组,数组里面是Student类型,这个数组是20个。但是里面没有具体的实例的
  • 打赏
  • 举报
回复
student[] stu = new student[20] 只定义了数组的20个位置,并且类型为student,并没有初始化其中的值,引用类型默认为null
Silly-77 2018-10-12
  • 打赏
  • 举报
回复
引用 6 楼 zhr305 的回复:
谢谢各位,可否理解为new Student[20]是创建了20个引用呢?

这么说起来怪怪的 只是开了20个长度的空间 并没有引用在里面
zzzZZZ305 2018-09-28
  • 打赏
  • 举报
回复
谢谢各位,可否理解为new Student[20]是创建了20个引用呢?
夜雨恋星辰 2018-09-28
  • 打赏
  • 举报
回复
前面说的都很明了了,也可以根据空指针的报错一步步分析
verejava 2018-09-28
  • 打赏
  • 举报
回复
Java 数组 之 一维数组 http://www.verejava.com/?id=16992640551624
bcsflilong 2018-09-26
  • 打赏
  • 举报
回复
stu[i] = new Student(); 没有这段代码的话 stu[i] 是null 你不能调用他的属性 所以报错
Dan淡淡的心 2018-09-26
  • 打赏
  • 举报
回复
Student[] stu = new Student[20]; 这段代码等效于 List<Student> list = new ArrayList<Student>(20); 此时 数组内为 null 而不是Student对象 所以是错误的
alunSemiconductor 2018-09-26
  • 打赏
  • 举报
回复
Student[] stu = new Student[20]; 这句只是创建了一个空的容器或者理解为空盒子,里面有20个位置可以放东西,并且告诉后面的代码,只能往里面放Student类型的实例。

具体到stu[i] ,实际上只是容器中的某个位置,此时还是空的,必须先放进去内容:stu[i] = new Student(); 这时候stu[i]指向了具体的对象,才能使用。

nayi_224 2018-09-26
  • 打赏
  • 举报
回复
new Student[20]创建的是Student类型的数组对象。java中创建完的数组对象都会自动赋予每个位置一个默认值,对于引用数据类型,它的默认值为null。
Kelin. 2018-09-25
  • 打赏
  • 举报
回复
你可以理解为,创建了一个类型为student 的数组,这个是用来限制里面只能是student 类型的数据,然后,每个位置其实是空的,需要你手动去实例化,最开始的操作,严格意义上叫做声明数组,并不是实例化

50,537

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧