数据类型[] 数组名 = {元素1,元素2,元素3...};//必须在一个语句中完成,不能分成两个语句写
例如,定义存储1,2,3,4,5整数的数组容器
int[] arr = {1,2,3,4,5};//正确
int[] arr;
arr = {1,2,3,4,5};//错误
3.2.2. 动态初始化
数组变量的初始化和数组元素的赋值操作分开进行,即为动态初始化。
动态初始化中,只确定了元素的个数(即数组的长度),而元素值此时只是默认值,还并未真正赋自己期望的值。真正期望的数据需要后续单独一个一个赋值。
格式:
数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];
或
数组存储的数据类型[] 数组名字;
数组名字 = new 数组存储的数据类型[长度];
[长度]:数组的长度,表示数组容器中可以最多存储多少个元素。
注意:数组有定长特性,长度一旦指定,不可更改。
举例1:正确写法
int[] arr = new int[5];
int[] arr;
arr = new int[5];
举例2:错误写法
int[] arr = new int[5]{1,2,3,4,5};//错误的,后面有{}指定元素列表,就不需要在[]中指定元素个数了。
3.3. 一维数组的使用3.3.1. 数组的长度
数组的元素总个数,即数组的长度。
每个数组都有一个属性length指明它的长度,例如:arr.length 指明数组arr的长度(即元素个数)
每个数组都具有长度,而且一旦初始化,其长度就是确定且是不可变的。
3.3.2. 数组元素的引用
每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index)或下标,可以通过数组的索引/下标访问到数组中的元素。
Java中数组的下标从[0]开始,下标范围是[0, 数组的长度-1],即[0, 数组名.length-1]
数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6 * i];
3.4. 一维数组的遍历
将数组中的每个元素分别获取出来,就是遍历。for循环与数组的遍历是绝配。
举例
public class ArrayTest {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5};
//打印数组的属性,输出结果是5
System.out.println("数组的长度:" + arr.length);
//遍历输出数组中的元素
System.out.println("数组的元素有:");
for(int i=0; i<arr.length; i++){
System.out.println(arr[i]);
}
}
}
3.5. 数组元素的默认值
数组是引用类型,当我们使用动态初始化方式创建数组时,元素值只是默认值。
对于基本数据类型而言,默认初始化值各有不同。
对于引用数据类型而言,默认初始化值为null(注意与0不同!)
4. 一维数组内存分析4.1. Java虚拟机的内存划分
为了提高运算效率,对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
虚拟机栈:用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度的各种基本数据类型、对象引用,方法执行完,自动释放。
堆内存:存储对象(包括数组对象),new来创建的,都存储在堆内存。
方法区:存储已被虚拟机加载的类信息、常量、(静态变量)、即时编译器编译后的代码等数据。
本地方法栈:当程序中调用了native的本地方法时,本地方法执行期间的内存区域。
程序计数器:程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址。
4.2. 一维数组在内存中的存储4.2.1. 一个一维数组内存图
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr);//[I@4eec7777
}
程序执行流程:
main方法进入方法栈执行(绿色部分);
创建数组,JVM在堆内存中开辟空间,存储数组(黄色部分);
数组在内存中有自己的内存地址,以十六进制数表示(比如:0x01AB);
数组中有3个元素,默认值为0;
JVM将数组的内存首地址赋值给引用类型变量arr;
变量arr保存的是数组内存中的地址,而不是一个具体的数值。
数组下标为什么是0开始?因为第一个元素距离数组首地址间隔0个单元格。
4.2.2. 两个一维数组内存图
两个数组独立
public static void main(String[] args) {
int[] arr = new int[3];
int[] arr2 = new int[2];
System.out.println(arr);
System.out.println(arr2);
}
4.2.3. 两个变量指向一个一维数组
public static void main(String[] args) {
// 定义数组,存储3个元素
int[] arr = new int[3];
//数组索引进行赋值
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
//输出3个索引上的元素值
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//定义数组变量arr2,将arr的地址赋值给arr2
int[] arr2 = arr;
arr2[1] = 6;
System.out.println(arr[1]);
}
定义数组arr并赋值1、2、3;
int[ ] arr2 = arr,将arr的内存地址赋值给arr2,arr与arr2指向同一个内存地址,即arr与arr2指向同一个一维数组;
arr2[1] = 6,将arr2数组的第二个元素修改为6,输出arr的第二个元素也是6,说明arr与arr2指向的是同一个数组。
5. 二维数组
Java 语言里提供了支持多维数组的语法。
如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格,像Excel中的表格、围棋棋盘一样。
对于二维数组的理解,可以看成是一维数组array1又作为另一个一维数组array2的元素而存在,例如上图,每一行都是一个一维数组,三行一维数组又组成了一个新的一维数组。
创业/副业必备:
本站已持续更新1W+创业副业顶尖课程,涵盖多个领域。
点击查看详情
评论(0)