• 数组概念: 数组就是用于存储数据的长度固定的容器,保证多个数据的数据类型要一致。
  • 百度百科中对数组的定义:
    所谓数组(array),就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,以便统一管理他们,然后用编号区分他们,这个名字称为数组名,编号称为下标或索引(index)。组成数组的各个变量称为数组的元素(element)。数组中元素的个数称为数组的长度(length)。
    数组的特点:
    1、数组的长度一旦确定就不能修改
    2、创建数组时会在内存中开辟一整块连续的空间。
    3、存取元素的速度快,因为可以通过[下标],直接定位到任意一个元素。

数组类型

  • 一 :静态初始化  
  1. 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
  2. 数据类型[] 数组名 = {元素1,元素2,元素3...}; 
  • 二:动态初始化
  1. 数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];
  • 数组定义格式详解:
  • 数组存储的元素的数据类型: 创建的数组容器可以存储什么数据类型的数据。
  • 元素的类型可以是任意的Java的数据类型。例如:int, String, Student等
  • [] : 表示数组。
  • 数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
  • new:关键字,创建数组使用的关键字。因为数组本身是引用数据类型,所以要用new创建数组对象。
  • [长度]:数组的长度,表示数组容器中可以存储多少个元素。
  • 注意:数组有定长特性,长度一旦指定,不可更改。
  • 和水杯道理相同,买了一个2升的水杯,总容量就是2升,不能多也不能少。

        数组的默认值

                                当我使用动态数组时,只确定数组的长度,那么数组的元素是什么呢?

java中数组的结构体数组的长度 java数组的长度是什么意思_数据类型

Java虚拟机的内存划分

为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

java中数组的结构体数组的长度 java数组的长度是什么意思_数组_02

 

区域名称

作用

程序计数器

程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址

本地方法栈

当程序中调用了native的本地方法时,本地方法执行期间的内存区域

方法区

存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

堆内存

存储对象(包括数组对象),new来创建的,都存储在堆内存。

虚拟机栈

用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度的各种基本数据类型、对象引用,方法执行完,自动释放。

一个数组内存图

java中数组的结构体数组的长度 java数组的长度是什么意思_二维数组_03

两个数组内存图


java中数组的结构体数组的长度 java数组的长度是什么意思_数组_04


 两个变量指向一个数组

java中数组的结构体数组的长度 java数组的长度是什么意思_数组_05

 二维数组

  • 二维数组:本质上就是元素为一维数组的一个数组。
  • 二维数组的标记:[][]
  • 元素的数据类型[][] 二维数组的名称;

二维数组也可以看成一个二维表,行*列组成的二维表,只不过这个二维表,每一行的列数还可能不同。但是每一个单元格中的元素的数据类型是一致的,

数组常见的问题

数组越界异常

public static void main(String[] args) {
    int[] arr = {1,2,3};
    System.out.println(arr[3]);
}

创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码

数组空指针异常

public static void main(String[] args) {
		//定义数组
		int[][] arr = new int[3][];
        
        System.out.println(arr[0][0]);//NullPointerException
    }

因为此时数组的每一行还未分配具体存储元素的空间,此时arr[0]是null,此时访问arr[0][0]会抛出NullPointerException 空指针异常。