1. 数组(Array)

1.1 概述

  • 1.1.1 定义:数组是存储同一数据类型多个元素的容器
  • 1.1.2 核心限制:数组长度一旦确定不能修改,即不能添加或删除元素

1.2 声明方式

  • 1.2.1 推荐写法数据类型[] 数组名
  • 1.2.2 兼容写法数据类型 数组名[]

1.3 初始化赋值

  • 1.3.1 静态初始化:手动添加元素,系统自动统计长度
  int[] arr = {'q', 12, 7, 8, 4, 6};
  • 1.3.2 动态初始化:手动定义长度,系统自动赋默认值
  String[] strs = new String[5];
  • 1.3.3 动态初始化(带元素)
  double[] dous = new double[]{1, 7, 8, 54, 9, 4, 6};
  • 1.3.4 先声明后赋值:不能使用静态初始化,只能用 new
  int[] ints;
  // ints = {1,4,5,7,8,9}; // 报错
  ints = new int[10];            // 正确
  ints = new int[]{1,2,3,4,5,6}; // 正确

1.4 数组的使用

  • 1.4.1 访问元素数组名[索引值],索引从 0 开始
  • 1.4.2 获取长度数组名.length

1.5 数组的打印

  • 1.5.1 直接打印数组名:输出的是地址值,如 [I@2f4d3709,无实际意义
  • 1.5.2 打印数组内容:需使用 Arrays.toString(数组名),需导包 import java.util.Arrays;
  System.out.println(Arrays.toString(strs)); // [null, null, null, null, null]

1.6 动态初始化默认值

数据类型默认值
byte / short / int / long0
float / double0.0
char'\u0000'(空字符)
booleanfalse
引用类型(如 Stringnull

1.7 常见异常

  • 1.7.1 ArrayIndexOutOfBoundsException(数组索引越界):使用了超出范围的索引时抛出,合法索引范围为 0 ~ length - 1
  int[] ints = new int[]{1, 7, 8, 4, 5, 6};
  System.out.println(ints[ints.length]); // 报错,最大索引为 length - 1
  • 1.7.2 NullPointerException(空指针异常):数组被赋值为 null 后,调用其索引、长度等操作时抛出
  String[] str = null;
  System.out.println(str[0]); // 报错,str 为 null

2. 示例代码

2.1 Demo01

package com.itszt.day03;
 
import java.util.Arrays;
 
public class Demo01 {
    public static void main(String[] args) {
        // 静态初始化
        int[] arr = {'q', 12, 7, 8, 4, 6};
        System.out.println(arr[5]);      // 6
        System.out.println(arr.length);  // 6
 
        // 动态初始化,打印地址值 vs 打印内容
        String[] strs = new String[5];
        System.out.println(strs);                   // 地址值
        System.out.println(Arrays.toString(strs));  // [null, null, null, null, null]
 
        // 动态初始化(带元素)
        double[] dous = new double[]{1, 7, 8, 54, 9, 4, 6};
        System.out.println(dous.length); // 7
 
        // 先声明后赋值,只能用 new
        int[] ints;
        ints = new int[10];
        ints = new int[]{1, 2, 3, 4, 5, 6};
    }
}

2.2 Demo03

package com.itszt.day03;
 
import java.util.Arrays;
 
public class Demo03 {
    public static void main(String[] args) {
        int[] ints = new int[5];
        System.out.println(Arrays.toString(ints)); // [0, 0, 0, 0, 0]
        byte[] bs = new byte[5];
        System.out.println(Arrays.toString(bs));   // [0, 0, 0, 0, 0]
        long[] l = new long[5];
        System.out.println(Arrays.toString(l));    // [0, 0, 0, 0, 0]
        double[] dou = new double[5];
        System.out.println(Arrays.toString(dou));  // [0.0, 0.0, 0.0, 0.0, 0.0]
        boolean[] boo = new boolean[5];
        System.out.println(Arrays.toString(boo));  // [false, false, false, false, false]
        char[] ch = new char[5];
        System.out.println(Arrays.toString(ch));   // [ ,  ,  ,  ,  ]
    }
}

2.3 Demo04

package com.itszt.day03;
 
public class Demo04 {
    public static void main(String[] args) {
        // ArrayIndexOutOfBoundsException:索引越界
        // int[] ints = new int[]{1,7,8,4,5,6};
        // System.out.println(ints[ints.length]); // 报错
 
        // NullPointerException:空指针异常
        // String[] str = null;
        // System.out.println(str[0]); // 报错
    }
}

3. 总结

知识点核心要点
长度限制数组长度固定,不可增删元素
静态初始化{元素1, 元素2} 直接赋值
动态初始化new 类型[长度]
动态初始化带元素new 类型[]{元素1, 元素2}
先声明后赋值只能用 new,不能用 {}
访问元素数组名[索引],索引从 0 开始
打印内容Arrays.toString()
整数默认值0
浮点默认值0.0
布尔默认值false
字符默认值'\u0000' 空字符
引用类型默认值null
索引越界异常使用超出范围的索引
空指针异常数组为 null 时访问其成员