一维数组
整型一维数组为例:
- 申明:元素的数据类型【】 数组名;
int[] arry ;
- 初始化
需要明确的:
(1)确定数组的长度
(2)确定数组的元素的值
一般将申明和初始化合成一句:int[] arry={10,20,30};
- 静态初始化
//数组名=new元素的数据类型[]{元素的值列表} ;
arry=new int[]{10,20,30,40};
- 动态初始化
int array[] = new int[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
- 注意此下的方法是错误的
int array[] = new int[5]{1,2,3,4,5}
- 数组遍历
下标index的范围: [0,长度-1]
下标index的范围: [0, scores. length-1]
一维数组的内存小析
- 数组的存储:
(1)数组下标为什么从0开始?
下标表示的是这个元素的位置距离首地址的偏移量
(2)数组名中存储的是什么
数组名中存储的是数组在堆中一整块区域的首地址
(3)数组的元素如何存储
在堆中,依次连续的存储的,当遇到数组名时,就可以找到数组的首地址,那么再根据偏移量(偏移首地址的单位)找元素 - 核心概念
int[] array = {1,3,5, 7,9};
其中的int[ ] 也是 一种数据类型,数组类型,它是一种引用数据类型
- 引用,表示引用一个“对象”,也就是引用堆中的一块内存,Java程序是在JVM中运行,JVM中 的内存最最主要的两块区域:栈和堆。其中的栈就是存储我们的局部变量(现在见到的变量都是局部变量),而堆中存储的是对象(new出来的)
- 变量:本质上就是代表一块内存,new表示在堆中新建/申请一块新空间,用来存储“对象”
- 进一步解析
class Test06_ ArraySave InMemory {
public static void main(String[] args) {
int[] array = new int[]{1,3,5,7,9};
//int[] array = {1,3,5, 7,9};
System. out . println (array) ;//打印数组名
//结果: [I@15db9742
//这个值是,数组对象的类型@对象的hashCode编码值
//其中[I,表示int[]类型.
//15db9742是这个数组对象的hashCode编码值,类似于每个人都有一一个身份证号
}
打印数组名,代码块中为例,结果是 [I@15db9742(数组对象的类型@对象的hashCode编码值)
二维数组和多维数组
二维数组的运用
- 如何声明一个二维数组?
语法格式:
元素的数据类型[ ][ ] 数组名; - 如何初始化二维数组?
初始化:
(1)确定行数
(2)确定每一行的列数
(3)确定元素的值
- 静态初始化
二维数组名= new元素的数据类型[] []{{第一-行的值列表},{第二行的值列表}… {第n行的值列表}};
int[ ] [ ] scores ;
scores = new int[ ] [ ]{{67 ,89,45}, {90,99,88,100},
- 动态初始化
int a [ ] [ ] = new int [3] [5];
int b [ ] [ ] = new int [3] [ ];
b[0] = new int [2];
b[1] = new int [3];
b[2] = new int [5];
- 如何表示二维数组的行数?
二维数组名. length - 如何表示一行
此时把二维数组看成一个一维数组,把一行看成一个元素
二维数组名[行下标]
行下标的范围: [0,二维数组总行数-1] - 如何表示每一行的列数?即每一行元素的个数
二维数组的一行,其实又是一个一-维数组
二维数组名[行下标].length - 如何表示某行某列的一个元素呢?
二维数组名[行下标] [列下标]
列下标的范围:[0, 该行的列数-1] - 遍历二维数组
for(int i=0; i<二维数组名. length; 1++) {
for(int j=0; j<二维数组名[i] .1ength; j++){
System.out.print (二维数组名[i][j] +”") ;
}
System.out.println() ;
}
二维数组的内存存储原理
原理简析:在栈区申请了二维数组,并在堆区申请了固定大小的内存,在堆区将每一行一维数组的首地址放在一起组成一个一维数组,就是二维数组的行数组,访问二维数组的时候,先根据数组名找到行数组的首地址,再根据具体的坐标进行偏移找到具体的行的首地址,再根据偏移量找到对应的元素。