4.Java数组模块

Java数组模块

1.数组定义

数组(array)是一种用于存储多个相同类型数据的存储格式

数组两种定义格式:

  • 数据类型[] 变量名

定义类一个int类型的数组变量,变量名为arr,推荐使用

int[] arr
  • 数据类型 变量名[]
int arr[]

2.数组初始化

java数组必须先初始化才能使用

初始化:为数组中的数组元素分配内存空间,为每个数组元素赋值

数组初始化方法

  1. 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值

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

int [] arr = new int[3]

示例

public class ArrayDemo {
    public static void main(String[] args) {
        // 数组动态初始化
        int[] arr = new int[3];
        /*
            左:
                int:数组中元素为int类型
                []:这是一个数组
                arr:数组的名称
            右:
                new:为数组申请内存空间
                int:数组元素为int类型
                []:这是一个数组
                3:数组长度,就是数组中元素的个数
         */
    }
}

3.数组元素访问

数组内部元素的访问方式

格式:数组名[索引]

  • 索引:数组中数据的编号方式

  • 作用:用于访问数组中的数据,数组名[索引]等同于变量名,一种特殊的变量名

    • 特征1:索引从0开始
    • 特征2:索引是连续的
    • 特征3:逐一增加,每次加1
public class ArrayDemo {
    public static void main(String[] args) {
        // 数组动态初始化
        int[] arr = new int[3];

        // 输出数组名
        System.out.println(arr);  // [I@5a39699c

        // 输出数组中的元素
        System.out.println(arr[0]);  // 0
        System.out.println(arr[1]);  // 0
        System.out.println(arr[2]);  // 0
    }
}

4.内存分配

java内存分配

int[] arr = new int[3];

// 输出数组名
System.out.println(arr);  // [I@5a39699c  内存地址

// 输出数组中的元素
System.out.println(arr[0]);  // 0
System.out.println(arr[1]);  // 0
System.out.println(arr[2]);  // 0

new:开辟内存空间

image-20200703203840674

内存中取值的过程

image-20200703203640480

内存分配类别

image-20200703204347568

  • 栈内存:存储局部变量

定义在方法中的变量,例如:arr

使用完毕立即消失

  • 堆内存:存储new出来的内容(实体,对象)

数组在初始化时,会为存储空间添加默认值

​ 整数:默认值0

​ 浮点数:默认值0.0

​ 布尔值:默认值false

​ 字符:默认是空字符

​ 引用数据类型:默认是null

每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收期空闲时被回收。

数组内存图(单个数组)

![Kapture 2020-07-03 at 20.48.53](/Users/ryxiong/desk/目前学习/java基础/resource/Kapture 2020-07-03 at 20.48.53.gif)

数组内存图(多个)

![Kapture 2020-07-03 at 20.56.13](/Users/ryxiong/desk/目前学习/java基础/resource/Kapture 2020-07-03 at 20.56.13.gif)

数组内存图(多个指向同一个)

![Kapture 2020-07-03 at 20.59.47](/Users/ryxiong/desk/目前学习/java基础/resource/Kapture 2020-07-03 at 20.59.47.gif)

5.数组初始化-静态初始化

静态初始化:初始化时指定每个数组元素的初始值,有系统决定数组长度

格式: 数据类型[] 变量名 = new 数据类型[] {数据1, 数据2, 数据3, ...}

示例:

int[] arr = new int[] {1, 2, 3}

简化格式:数据类型[] 变量名 = {数据1, 数据2, 数据3,...}

推荐:

int[] arr = {1, 2, 3}

例子

public class ArrayDemo01 {
    public static void main(String[] args) {
        // 定义数组
        int [] arr = {1, 2, 3};
        // 输出数组名
        System.out.println(arr);

        // 输出数组中的元素
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

/*
[I@5a39699c
1
2
3
*/

5.数组操作的问题

越界索引:访问数组中不存的索引对应的元素,造成索引越界问题

public class ArrayDemo02 {
    public static void main(String[] args) {
        int[] arr = new int[3];
        System.out.println(arr[3]);
    }
}

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at java_01.ArrayDemo02.main(ArrayDemo02.java:6)

空指针异常:访问数组已经不再指向堆内存的数据,造成空指针异常

public class ArrayDemo03 {
    public static void main(String[] args) {
        int[] arr = new int[3];
        // 把null赋值给数组
        arr = null;
        System.out.println(arr[0]);
    }
}

Exception in thread "main" java.lang.NullPointerException
at java_01.ArrayDemo03.main(ArrayDemo03.java:8)

7.数据常见操作

数组遍历

获取数组长度

数组名.length

示例:arr.length

public class ArrayDemo04 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6};
        // 遍历数组
        for(int i=0; i<arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

获取最值

public class ArrayDemo04 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6};
        int max = arr[0];
        // 遍历数组
        for(int i=0; i<arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        System.out.println(max);
    }
}
原文地址:https://www.cnblogs.com/ryxiong-blog/p/13890166.html