原创

java语言-对象数组的内存解析

温馨提示:
本文最后更新于 2022年06月17日,已超过 9 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

学习完C语言之后我开始学习java了,虽说C语言和java语言有很多类似的地方,但是C语言和java语言毕竟是两种语言还是有着不同的地方,今天学习到对象的时候,有一个问题难到了我,就是对象数组的使用问题,经过查询我总结出了以下结论,仅代表个人观点,本人也是在学习过程中,有错误的地方请各位大神帮忙指出,感谢啦!

遇到的问题代码及解决

  • 创建一个类
class Student2{
   
    int number;
    int state;
    int score;
}

这里我要使用一个数组来保存n个学生对象,到这里我就懵了,这要怎么办呢?是不是要new二十个对象出来?…最后发现确实这样

  • 创建对象数组
Student2[] stu = new Student2[n];

其实看到这里我就直接懵了,为什么还会有用对象来当做变量类型来创建数组呢?想了好久我想起来了,在C语言中有一个自定义类型,就是结构体,那里面就可以这样来弄,那我这里就把这个理解为自定义类型了,也不知道对不对。(后面我也理解了)
但是还是有一个问题就是对象数组,那申请的这n个数组空间里面的初始值是什么样的呢!这我就不知道了,还得运行一下看看。
在这里插入图片描述
可以看到当打印stu的时候我们不难理解是数组的首元素地址,输入stu[0]的时候打印第一个值,看到是null说明是空值,就像String类型一样,为什么这样初始化呢,是不是java语言的规定呢,这一点还是不太清楚。

  • 给数组中的每一个对象数组赋值
for (int median = 0;median<n;median++){
   
            stu[median]  = new Student2();
            //利用random随机赋值
            stu[median].number = (int)Math.random() * (n - 1) + 1;
            stu[median].state = (int)Math.random() * (6 - 1) + 1;
            stu[median].score = (int)Math.random() * (100 - 0);
        }

这里面的stu[median] = new Student2();,一开始我还是很难理解,但是我画了个图之后就好理解多了
在这里插入图片描述
当定义好数组之后我们就要给每一个数组元素进行赋值操作,怎么样来赋值呢!
既然用了对象数组,那我们赋值的时候是不是也得考虑用对象来呀,没错就是这样的,既然用对象,那是不是就得new一个出来啊,因为对象就像一张图纸,使用的时候我们还得造出来,就是new操作,那new出来的这个对象是不是就得交给我们的数组中相应的元素啊,那就可以写成

 stu[median]  = new Student2();

我们可以用一个普通的new操作来比较一下

class Information{
    
 int number;
   int state;
  int score;
}

调用

  Information infor = new Information();

发现和上面的相比是不是少了一个多了一个数据啊,没错上面的就是少了一个自定义数据类型(Information),但是为什么上面的可以不写,而下面的就要写上呢?其实,上面的数组一开始就申请了对象数组,那么当我们去使用的时候就相当于已经定义过了,不需要再一次去定义了,而下面的这个我们一开始并没有给infor定义类型,所以使用的时候就需要定义一下,所以上面的和下面的相比就少了一个数据,但实际上没有少,只是换了一种方法定义而已,好比动态数组和静态数组的定义,可以好好看看代码,理解一下。

  • 赋值操作
            stu[median].number = (int)Math.random() * (n - 1) + 1;
            stu[median].state = (int)Math.random() * (6 - 1) + 1;
            stu[median].score = (int)Math.random() * (100 - 0);

这里的话就是一般的赋值操作。

正文到此结束