1.什么是数组

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

2.数组定义格式

第一种:数据类型[] 数组名

示例:

int[] arr;        
double[] arr;      
char[] arr;

第二种:数据类型 数组名[]

示例:

int arr[];
double arr[];
char arr[];

3.数组初始化

3.1概述:Java中的数组必须先初始化,然后才能使用。所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值

3.2动态初始化

初始化时只指定数组长度,由系统为数组分配初始值

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

范例: int [ ] arr = new int[3];

3.3静态初始化

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

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

范例: int [ ] arr = new int[ ] { 1, 2 , 3 } ;

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

范例: int [ ] arr = { 1, 2 , 3 } ;

3.4数组元素访问

什么是索引?

每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。

这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。

索引是数组中数据的编号方式

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

特征①:索引从0开始

特征②:索引是连续的

特征③:索引逐一增加,每次加1

访问数组元素格式:数组名[索引];

示例:

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];

        //输出数组名
        System.out.println(arr); //[I@880ec60(地址)

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

4.Java中的内存分配

栈内存:存储局部变量

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

使用完毕,立即消失

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

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

整数:0

浮点数:0.0

布尔:false

字符:空字符

引用数据类型:null

每一个new出来的东西都有一个地址值

使用完毕,会在垃圾回收器空闲时被回收

5.数组操作的两个常见小问题

5.1索引越界异常(ArrayIndexOutOfBoundsException)

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

数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。

程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

解决方案

将错误的索引修改为正确的索引范围即可!

5.2空指针异常(NullPointerException)

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];

        //把null赋值给数组
        arr = null;
        System.out.println(arr[0]);
    }
}

arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

解决方案

给数组一个真正的堆内存空间引用即可!

6.数组的输出

  • for循环遍历输出
  • 直接以数组名输出(只有char型数组可以输出内容,其他类型的输出的是内存地址)
public static void main(String[] args) {
        int[] arr = new int[]{1,4,7};
        char[] brr = new char[]{'1','2','3'};
        String[] crr = new String[]{"1","2","3"};
        System.out.println(arr);
        System.out.println(brr);
        System.out.println(crr);
    }

结果图:




java中char数组设置编码 java char数组定义_java


  • 以Arrays.toString(数组名)输出(带格式输出)
public static void main(String[] args) {
        int[] arr = new int[]{1,4,7};
        System.out.println(Arrays.toString(arr));
    }

结果图:


java中char数组设置编码 java char数组定义_数据结构_02


  • 如果想打印多维数组可以使用Arrays.deepToString方法
public static void main(String[] args) {
        int[][][] arr = new int[3][3][3];
        System.out.println(Arrays.deepToString(arr));
    }

结果图:


java中char数组设置编码 java char数组定义_数据结构_03