数组: 数组就是存储数据长度固定的容器.
容器: 就是将多个数据存储到一起,每个数据称为该容器的元素。
数组的定义:
方式一:
数组存储的数据类型[ ] 数组名称 = new 数组存储的数据类型[存储长度];
方式二:
数组的数据类型[] 数组名称 = new 数组的数据类型[]{元素1,元素2,元素3,...};
方式三:
数组的数据类型[] 数组名称 = {元素1,元素2,元素3,.....};
数组的特点:
-
数组的长度在程序运行期间不可改变。
-
数组本身就是一种引用数据类型
-
数组定义时是引用数据类型,但是数组容器里面存储的元素可以是基本数据类型也可以是引用数据类型。
-
数组当中存储的多个数据,类型保持一致。
数组初始化 :在内存当中创建了一个数组,并且向数组容器中赋予一些默认值。
两种常见的初始化动作:
-
静态初始化(指定内容):在创建数组的时候,不指定数组的长度(存储元素的个数),而是直接指定具体的 【内容】
-
动态初始化(指定长度) :在创建数组的时候,直接指定数组的长度(存储元素的个数)。
建议:
如果不确定数组当中存储的内容时,用动态初始化,反之内容已经确定了,使用静态初始化。大多数情况下,建议使用动态初始化。
属性length代表的就是数组的长度,int类型,数组的最大索引值为【数组名.length-1】
数组原理内存图解
![]()
一个数组的内存存储
|
public static void main(String[] args) { int[] arr = new int[3]; System.out.println(arr);// 内存地址哈希值 }
|
| 区域名称 |
|
| 寄存器 |
给cpu使用,和我们开发没有关系 |
| 本地方法栈 |
JVM在使用操作系统功能时使用的,和我们的开发没有关系 |
| 方法区 |
存储可以运行的class文件(常量池,静态域) |
| 方法栈(stack) |
方法运行时使用的内存,比如说main方法运行,进行方法栈当中运行 |
| 堆内存(heap) |
存储对象或者数组,new出来的对象,都统统存储在堆内存当中。 |
| |
|
两个数组的内存分析图解
|
public static void main(String[] args) { int[] arr = new int[3]; int[] arr2 = new int[2]; System.out.println(arr); System.out.println(arr2); }
|
两个变量指向同一个数组
|
public static void main(String[] args) { // 定义一个数组,动态初始化 int[] arr = new int[3];// 0 0 0 // 通过索引访问数组当中的元素 arr[0] = 10; arr[1] = 20; arr[2] = 30; // 查看数组当中的第二个元素 System.out.println(arr[1]);// 20 // 定义一个数组,将上一个数组赋值该数组 int[] arr2 = arr; arr2[1] = 50; // 查看arr数组当中的第二个元素 System.out.println(arr[1]); }
|
![]()
数组遍历 【重点】
数组遍历:就是将数组中的每一个元素分别获取出来,就是遍历。遍历使我们操作数组的核心和重点内容。
数组的索引从0开始,依次递增,递增到arr.length-1为止,引入循环结构
|
public static void main(String[] args) { // 静态初始化一个int数组 int[] arr = {1,2,3,4}; // 数组遍历 for或者while for (int i = 0; i <= arr.length-1; i++) {
//遍历容 器时,初始化语句当中的循环变量一般都是索引值 System.out.println(arr[i]); } }
|