引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。连续的空间。占据的空间的大小,取决于数组的长度和数组中元素的类型。长度一旦确定,就不能修改。格式:
//推荐
元素的数据类型[] 一维数组的名称;
//不推荐
元素的数据类型 一维数组名[];数组的声明 ,需要明确:
静态初始化:
如果数组变量的初始化和数组元素的赋值操作同时进行 ,那就称为数组初始化
静态初始化,本质是用静态数据为数组初始化,此时数组的长度由静态数据的个数决定
一维数组声明和静态初始化格式1:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
或
数据类型[] 数组名;
数组名 = new 数据类型[]{元素1,元素2,元素3,...};new:关键字,创建数组使用的关键字。因为数组本身是引用数据类型,所以要用new创建数组实体。
一维数组声明和静态初始化格式2:
数据类型[] 数组名 = {元素1,元素2,元素3...};//必须在一个语句中完成,不能分成两个语句写动态初始化:
数组变量的初始化和数组元素的赋值操作分开进行,即为动态初始化。
动态初始化中,只确定了元素的个数(即数组的长度),而元素值此时只是默认值,还并未真正赋自己期望的值。真正期望的数据需要后续单独一个一个赋值。
格式:
数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];
或
数组存储的数据类型[] 数组名字;
数组名字 = new 数组存储的数据类型[长度];
// 举例:动态初始化的写法
int[] arr = new int[5];[长度]:数组的长度,表示数组容器中可以最多存储多少个元素。
注意:数组有定长特性,长度一旦指定,不可更改。 和水杯道理相同,买了一个2升的水杯,总容量就是2升是固定的。
数组的长度:
数组元素的引用:数组名[索引或下标]
数组的下标范围:java中数组的小标是从[0] 开始 , 下标范围是[0 , 数组长度 - 1] , 即[0 , 数组名.length - 1]
数组元素下标可以是整形常量或整形表达式
遍历:将数组中的每个元素分别取出来就是遍历。for循环与数组的遍历是绝配
数组是引用类型 ,当使用动态初始化方式创建数组时 ,元素只有默认值
public class ArrayTest6 {
public static void main(String argv[]){
int a[]= new int[5];
System.out.println(a[3]); //a[3]的默认值为0
}
}

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

区域名称 | 作用 |
|---|---|
虚拟机栈 | 用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度的各种基本数据类型、对象引用,方法执行完,自动释放。 |
堆内存 | 存储对象(包括数组对象),new来创建的,都存储在堆内存。 |
方法区 | 存储已被虚拟机加载的类信息、常量、(静态变量)、即时编译器编译后的代码等数据。 |
本地方法栈 | 当程序中调用了native的本地方法时,本地方法执行期间的内存区域 |
程序计数器 | 程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址 |
声明与初始化
二位数组声明的语法格式:
//推荐
元素的数据类型[][] 二维数组的名称;
//不推荐
元素的数据类型 二维数组名[][];
//不推荐
元素的数据类型[] 二维数组名[];静态初始化
动态初始化:
格式1 : 规则二维表 ,每一行的列数是想同的
//(1)确定行数和列数
元素的数据类型[][] 二维数组名 = new 元素的数据类型[m][n];
//其中,m:表示这个二维数组有多少个一维数组。或者说一共二维表有几行
//其中,n:表示每一个一维数组的元素有多少个。或者说每一行共有一个单元格
//此时创建完数组,行数、列数确定,而且元素也都有默认值
//(2)再为元素赋新值
二维数组名[行下标][列下标] = 值;格式2 :不规则 ,每一行的列数不一样