[Java教程]14.数组,默认值

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 也是一个关键字.


下一节完成练习和,学习 时间类 的使用

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章