java数组基础详解

java数组基础详解

一、引言

数组定义

数组是一种数据结构,用来存储同一类型值的集合

继基本数据类型后,为什么还要学数组?

变量虽然也能存储数据,但是存储的数据有限。
为了避免变量名的冗余以及为了方便对同一类型的数据进行操作,便有了数组。

二、声明数组

格式一:数据类型[] 数组名

int[] array;

格式二:数据类型 数组名[]

int array[];

注释:大多数java程序员喜欢第一种风格

三、初始化数组

什么是初始化?

在内存中,为数组容器开辟空间,并将数据存入容器的过程

注意:未经初始化的数组不可以使用,如下所示:在这里插入图片描述

java中初始化分为静态初始化和动态初始化

  • 静态初始化:
    • 手动指定数组元素,系统会根据元素个数,计算出数组长度
  • 动态初始化:
    • 手动指定数组长度,由系统给出默认初始化值
3.1 静态初始化

完整格式:数据类型[] 数组名=new 数据类型[]{元素1,元素2,元素3…};

int[] array=new int[]{1,2,3,4};

简化格式:数据类型[] 数组名={元素1,元素2,元素3…};

int[] array={1,2,3,4};
3.2 动态初始化

格式:数据类型[] 数组名=new 数据类型[数组长度];

int[] arr=new int[3];

动态初始化:手动指定数组长度,由系统给出默认初始化值,如下所示:
请添加图片描述
例子:

        int[] arr = new int[3];
        System.out.println(arr[1]);

        int[][] array1 = new int[2][];
        for (int i = 0; i < 2; i++) {
            System.out.println(array1[i]);//默认初始化为null
        }
        int[][] array2=new int[2][3];
        for (int i = 0; i < 2; i++) {
            System.out.println(array2[i]);
        }
        System.out.println(array2[0][0]);

运行结果

0
null
null
[I@4eec7777
[I@3b07d329
0
四、访问数组元素

访问数组元素

格式:数组名[索引];
索引:索引是数组容器中空间的编号,编号从0开始,逐个+1增长

例子:

int[] array={1,2,3}
System.out.println(array);//打印数组名
System.out.println(array[0]);//访问数组中第一个元素

运行结果

[I@4eec7777
1

那么,数组名中存放的 [I@4eec7777是什么意思呢?

  • [:表示当前空间为数组类型
  • I:表示当前数组的数据类型为int类型
  • @:分隔符
  • 4eec7777:数组在内存中的十六进制地址

总结一下:

数组名:数组地址
数组名[索引]:数组元素

五、遍历数组

方法一:for循环

int[] array={1,2,3};
for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
}

方法二:for each 循环

int[] array={1,2,3};
for(int element:array){
    System.out.println(element);
}
六、分析数组内存

java内存分配介绍

方法区:字节码文件加载时进入的内存
栈内存:方法运行时所进入的内存
堆内存:new出来的东西会在这块内存中开辟空间并产生地址(今天学的数组便是)

例子1:

int[] array1={1,2,3};
int[] array2=array1;
for(int element:array2){
    System.out.println(element);
}
System.out.println("array1的地址为:"+array1);
System.out.println("array2的地址为:"+array2);

运行结果:

1
2
3
array1的地址为:[I@682a0b20
array2的地址为:[I@682a0b20

结论:

array1在堆空间中开辟出了一块空间,在运行时,栈空间记录的是array1在堆空间的地址。
随后又将array1中记录的地址值赋值给了array2,所以array2与array1所指向的是同一块空间。

例子2:
请添加图片描述

结论:

数组名中存储的是arr在堆空间的地址,所以在change方法中可以改变arr中元素的值。

七、数组常见异常
7.1 索引越界异常ArrayIndexOutOfBoundsException

当访问了数组中不存在的索引,就会引发索引越界异常

7.2 空指针异常NullPointerException

当引用数据类型变量被赋值为 null 之后,地址的指向被切断,还继续访问堆内存数据,就会引发空指针异常

例子:

int[] array1={1,2,3};
array1=null;
System.out.println(array1);//会报空指针异常
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋千水竹马道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值