文章内容输出来源:拉勾教育大数据开发高薪训练营
一、数组的概念:
☀ 数组:是一种容器,可以同时存放多个数据类型相同的值;
☀ 容器:将多个数据存储到一起,每个数据称之为元素;
二、数组的特点:
☀ 是引用类型;
☀ 数组中的数据类型必须统一;
☀ 数组长度在程序运行间不能改变;
三、java中的内存划分:
四、一维数组:
1. 一维数组的初始化(声明):
1.1 动态初始化(指定长度):int [] array_name = new int [数组长度];
1.2 静态初始化(指定内容):int [] array_name = new int [ ]{ 元素1,元素2,..... };
1.3 省略的静态初始化:int [] array_name = { 元素1,元素2,..... };
注意:
/* 静态初始化可分为两步骤: */
int [] array;
array = new int[] {1,2};
/* 动态初始化可分为两步骤: */
int [] array;
array = new int[4];
/* 省略的静态初始化不可分步骤: */
int [] array;
array = {1,2}; //程序报错
2. 一维数组的访问:
通过下标访问数组,下标从0开始,范围在0~数组长度-1,访问方式为:数组名[下标];注意数组下标不能越界;
当使用动态初始化数组,其中的元素会有默认值:
a. 整数型:默认为 0;
b. 浮点型:默认为 0.0;
c. 字符型:默认为 '\u0000’;
d. 布尔型:默认为 false;
e. 引用型:默认为 null;
3. 一维数组的内存图:
程序的执行流程分析:
- main方法进入方法栈执行;
- 创建数组,JVM会在堆内存中开辟空间,存储数组;
- 数组在内存中有自己的内存地址,以16进制表示;
- 数组中有三个元素,默认值为0;
- JVM将数组的内存地址赋给引用类型变量arr;
- 变量array保存的是数组内存中的地址,而不是具体数值,因此成为引用数据类型;
问:为何要有栈内存与堆内存之分?
答:当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法中定义的变量都会逐个放入这块内存栈。随着方法执行的结束,这个内存栈也会自行销毁。因此,所有在方法中定义的局部变量都是放在栈内存中的;当我们在程序中创建一个对象时,这个对象将被保存在运行时数据区中,以便于能反复利用(因为创建对象的成本一般都比较大),这个程序运行时内存就是堆内存。堆内存中的队形对象不会随着方法的结束而销毁,及时方法结束后,这个对象可能被另一个引用变量所引用,则这个对象不会被销毁。只有当一个对象没有被任何的引用变量所引用时,java的垃圾回收机制才会在适当的时侯回收它。
五、二维数组:
本质上就是多个一维数组组成的数组
1. 二维数组的初始化:
- int [][] array_name = new int[ 行数 ][ 列数 ];
- int [][] array_name = { { value,value,......},{ value,value,....},........};
2. 二维数组合法的声明(6种):
float[][] a = new float[6][];
float[][] a = new float[6][6];
float a[][] = new float[6][];
float a[][] = new float[6][6];
float []a[] = new float[6][];
float []a[] = new float[6][6];
总之,二维数组声明时必须知道行数;