Java教程专栏:https://blog.csdn.net/qq_41806966/category_9929686.html
hello,I'm shendi
本节会认识学习数组.
如果在阅读过程中有更好的建议等 可以在评论区留言.
目录
数组
概念
数组是一个很重要的东西.
什么是数组? 所谓数组,是有序的元素序列.
可以理解为存放指定物品的箱子(就好像放衣服的箱子里只能放衣服(规定好的))
为什么需要数组?
我们有个需求,需要输出从0到100的数字,这个时候会想到使用循环,如下
for (var i = 0;i < 100;i++) {
System.out.println(i);
}
假如需求改变了,这100个数字不再是有序的,而是由系统随机出来的,那么这个时候我们怎么实现这个需求呢?
我们只能一个个的进行随机数,存入变量...
int random1 = (int)(Math.random() * 100);
int random2 = (int)(Math.random() * 100);
int random3 = (int)(Math.random() * 100);
...
int random100 = (int)(Math.random() * 100);
也就是我们要书写一百次,没有人愿意傻傻的书写这么多次,我们应该找另一种方法.
因为需要这么多变量,我们第一时间想到的肯定是循环,我们不可能循环给同一个变量赋值(直接替换了).
这个时候,就需要使用数组了.
Java里没有指针,数组的本质其实就是指向一连串的内存地址...
定义数组
定义数组的方式与变量一样,不同的是需要加上 []
语法
- 有两种方式定义
- 类型[] 变量名;
- 类型 变量名[];
例如定义一个 int 类型的数组
- int[] 变量名;
- int 变量名[];
例如定义一个字符串类型的数组
- String[] 变量名;
- String 变量名[];
推荐使用第一种定义方式,和类型放在一起可以增强可读性.
初始化数组
我们之前说到,数组其实就是用来存变量的一个容器,既然是一个容器,肯定有大小,里面物品的位置等.
数组的大小被创建后是不能被改变的,就好像你柜子的大小无法改变,除非你拆了重装(也就等于一个新柜子-新数组了).
既然大小是固定的,所以我们初始化数组的时候就要指定大小,所以初始化的语法为
- 初始化也可以有几种
- 第一种,初始化一个指定长度的空数组
- new 类型[长度];
- 第二种,直接将一些内容变为一个数组(类型要相同)
- 例如 int 类型的数组
- int[] arr = {1,2,3,4,5,6};
- 这样,数组的长度为 6 个
- 第三种,与上面一样
- 例如String类型的数组
- String[] arr = new String[]{"第一个","第二个"};
- 这个数组长度为2
- 第一种,初始化一个指定长度的空数组
直接赋值的使用逗号隔开.
使用数组
我们已经知道如何定义一个数组了,接下来就是使用.
在使用之前我们需要知道如何获取数组长度
使用 数组的 length 属性,返回数组的长度
例如
int[] arr = new int[10];
System.out.println(arr.length);
上面输出结果就是10.
既然数组是存对应类型的变量的容器,那我们怎么将变量从数组取出来?
很简单,只要使用 数组变量名[下标]
下标就是我们的变量在数组中的位置
注: 下标都是从 0 开始,而不是 1
获取到指定变量后,操作方法与变量一致.
获取到后,变量还存在数组,并不会被删除...(就相当于你打开衣柜,看衣服,但没有将衣服拿出来)
下面列举使用方法
- 创建 int 类型数组 arr
- int[] arr = new int[5];
- 我们创建的数组是一个空数组,int类型的默认值为 0,所以里面的数字都为 0,我们将第二个数组改成 5
- arr[1] = 5;//数组的下标从 0 开始,所以第二个就是 1.
- 我们获取到刚刚设置的
- int one = arr[1];
- 数组的长度是无法改变的,所以我们无法在原数组上进行删除.删除的话只能将值变为默认值(int 类型默认值是 0)
在知道如何使用后,我们接下来就来完成刚开始说的需求:
系统随机生成一百个变量,并输出
这次我用了另一台电脑,所以看到的会感觉有点不同.
创建一个java文件用于我们完成需求.
将 main 写好.
在里面创建一个数组,大小为 100,接下来就是使用循环来给数组进行赋值.我们就可以得到 100 个由系统生成的随机数
代码如下
编译运行,结果如下
常见问题
在使用数组的过程中会发生一些很常见的问题
- ArrayIndexOutOfBoundsException(数组越界)
- 这个问题就是说,你的数组长度没有5个,但是你要获取第五个的内容,所以就出问题 (就像通过柜子获取到柜子外的东西?)
- NullPointerException(空指针异常)
- 这是最常见的问题,不仅仅对于数组,这个问题的原因在于 你的数组没有初始化.解决方法就是进行初始化(初始化内容在上面有)
- OutOfMemoryError(超出内存)
- 这个问题就是你数组的长度太大了.比如上亿...
- 计算一下,int类型的数组,一个int类型占四个字节(byte),在计算机中都是 1024 进1,
- 1024字节就是 1kb,
- 1024kb就是1m
- 1024m 就是1G
- 也就是说,int类型数组为1万的话,也就占 40000 字节 = 39kb
- 十万 = 400000 字节 = 390 kb
- 千万 = 4千万 字节 = 39062 kb = 38M(兆)
- 十亿 = 4十亿字节 = 3814M = 3.7G
- 使用的是内存(RAM)
实现可变数组(练习)
对于固定长度的数组有时候不能满足我们的需求,比如我们的员工数组,员工会增加,超过上限...
这个时候就需要一个无上限的数组,创建一个类来实现可变数组,供其他类使用.
思路: 数组的长度是固定的,但是内容是不变的,所以我们可以通过创建一个新的数组,然后将原数组的内容拷贝到新数组来实现长度增加.(后面学到的 ArrayList 也是这样实现的)
默认值
boolean | false |
int |
0 |
short | 0 |
float | 0.0 |
double | 0.0 |
char | \u0000 |
long | 0 |
byte | 0 |
引用类型(对象) | null |
除了八大基本类型外,其余的都是引用类型,默认值为 null,所以 null 也是一个关键字.
下一节完成练习和,学习 时间类 的使用