数组及数组JVM内存划分day4
java中第一个存储数据的容器:数组
特点:
1、数组的长度大小是固定的
2、同一个数组中,存储的元素数据类型是一样的
数组的定义语句格式:
数据类型[] 数组名;
举例:int[] arr; // 定义了一个可以存储int类型的一维数组,数组名叫做arr
数组没有初始化,无法直接使用,数组是我们第一个接触到的引用数据类型
如何对数组进行初始化?
动态初始化:先规定数组的大小,数组中的元素先系统赋默认值,后续再自己赋值
静态初始化:自己将数据赋值,大小由系统根据我们赋值的数量来决定
JVM内存的划分:Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈 存储局部变量
堆 存储new出来的东西
方法区 (面向对象部分讲)
本地方法区 (和系统相关)
寄存器 (给CPU使用)
动态初始化:
语句定义格式:
数据类型[] 数组名 = new 数据类型[数组的大小];
举例:int[] arr = new int[3];
白话文解释:创建了一个可以存储3个int类型元素大小的数组,数组名叫做arr
专业术语解释:在堆内存中开辟一个连续空间大小为3的数组对象,将地址值赋值给栈内存中arr变量
举例:int[] arr = new int[3];
左边:
int: 表示存储元素的数据类型
[]: 表示这是一个一维数组
arr: 数组名,符合标识符的命名规则,相当于变量名
右边:
new: 在堆内存中开辟空间,将来看到new,就意味着在堆内存中开辟空间
int: 表示存储元素的数据类型
[]: 表示这是一个一维数组
3: 表示该数组最多可以存储3个元素,数组长度为3
如何获取数组中的元素?
java中的数组具有索引下标的概念,可以通过索引获取对应位置上的元素,索引是从左向右,从0开始的
索引最大值 = 长度-1
语句定义格式:
数组名[索引]
静态初始化:
语句定义格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,....};
举例:int[] arr1 = new int[]{11,22,33,44,55,66};
简化格式:
数据类型[] 数组名 = {元素1,元素2,元素3,....};
举例: int[] arr1 = {11,22,33,44,55,66};
注意:
静态初始化简化写法,无法拆开进行初始化,必须将初始化与定义在同一行,由一个赋值=语句进行赋值;
而非简化写法,可以拆开定义和初始化。
二维数组:元素为一维数组的数组
语句定义格式1:
数据类型[][] 变量名 = new 数据类型[m][n];
举例:int[][] arr = new int[3][4];
创建了可以存储3个长度为4的一维数组的数组,元素的类型是int类型
二维数组的语句定义格式2:当二维数组中的每个一维数组的长度不一样的时候,可以采用该种方式定义
数据类型[][] 变量名 = new 数据类型[m][];
m: 指的是二维数组中可以存储m个一维数组
将来我们可以自己创建一维数组,将地址值赋值给对应的二维数组中的元素
创建二维数组的同时,赋值一维数组
语句定义格式3:
数据类型[][] 变量名 = new 数据类型[][]{{元素1,元素2,元素3,...}, {}, {},...};
简化
数据类型[][] 变量名 = {{元素1,元素2,元素3,...}, {}, {},...};
二维数组的遍历
public class Array2Test1 {
public static void main(String[] args) {
//创建一个二维数组
int[][] arr6 = {{11, 22, 33, 44}, {1, 2, 3}, {100, 200, 300, 400, 500}};
for (int i = 0; i < arr6.length; i++) { // 外层循环控制的是遍历第几个一维数组元素
for (int j = 0; j < arr6[i].length; j++) { // 内层循环控制的是每一个一维数组中元素的遍历
if (j == 0) {
System.out.print("[" + arr6[i][j] + ", ");
} else if (j == arr6[i].length - 1) {
System.out.print(arr6[i][j] + "]");
} else {
System.out.print(arr6[i][j] + ", ");
}
}
//换行
System.out.println();
}
}
}