目录
数组的定义和组成格式
数组的定义:用于存储多种相同类型的存储模型
组成格式:数据类型 [] 变量名 表示创建了一个什么数据类型的变量名为什么的数组
int [] a
//表示创建了一个变量名为a的int类型的数组 这个数组只接收int类型
动态初始化和静态初始化
数组除了创建以外还需要初始化,即给这个数组生成存储空间,在java中有两种方法给数组初始化。
动态初始化:自定义一个数组长度 由系统为这个数组分配默认值 或者人为在后期手动赋值
数组长度:就是这个数组中能够包含多少个元素
默认值:
数据类型 | 默认值 |
整型 | 0 |
浮点型 | 0.0 |
字符型 | 默认值是空字符 |
布尔型 | false |
引用数据类型 | null |
格式:数据类型 [] 变量名 = new 数据类型[数组长度];
int [] arr =new int[5];
//使用动态初始化的方法创建数组
//这里的数组长度为5 表示这个数组只能容纳5个int类型的数据 索引就是从0-4
System.out.println(arr[0]);
//表示获取arr这个数组下索引为0的元素 因为没有给整个元素赋值 所以会根据这个数组的数据类型给里面的元素采取默认值的方式进行输出
//所以这里输出的是数字0
静态初始化:用户直接给这个数组进行元素的定义 即不定义数组长度了 直接定义元素
格式:数据类型 [] 变量名 = {元素1,元素2,元素2,.....};
int [] arr = {10,20,30}
//使用静态初始化的方法创建了一个数组 右边对应的就是这个数组的元素
System.out.println(arr[0]);
//获取变量名为arr的数组下的索引为0的元素 即10
数组的内存分配
int [] data = {10,20,30}【动态初始化数组】
在创建数组的时候,左右两边都会生成空间,右边生成一个堆内存,堆内存中包含存储数组的内存地址,数组的元素 数组元素对应的索引。然后将存储数组的内存地址赋值给左边的变量名。也就是说右边new出来一个空间赋值给左边,左边指向右边的空间
int [] arr=new int[3];【动态初始化数组】
动态初始化数组和静态初始化数组两者的内存分配是一样的,但是动态初始化数组的话,数组中的元素是没有被赋值的,所以是根据创建数组的数据类型来进行默认值的分配。如上图所示,采取的是动态初始化的方式,所以该数组中对应的元素值都是0
多个数组指向同一内存地址的情况
int [] a={99,20,30};
int [] b=a;//第二个数组没有声明内存地址 而是直接指向了第一个数组
//所以在多个数组为同一个内存地址的情况下 该内存地址中的数组元素是共享的
//即a数组能够改变该数组中的元素 b数组也能改变该数组中的元素
数组的遍历
int [] arr={10,20,30,40}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
//通过for循环输出整个数组
//int i=0,表示从0开始 结合下面的输出语句就代表从索引为0的元素开始输出
//.length表示获取指定数组中元素的个数 即这个数组中有多少个元素
//输出语句中为什么不直接输出i?因为你是做对这个数组的遍历 而不是输出i的ture的情况
//这里只是通过变量i来限制输出的索引 让这个遍历始终是在这个数组里面的
数组操作中容易出现的错误
索引越界:获取指定数组中的元素时,索引超过这个数组的最大索引(牢记索引是从0开始的)
int [] a ={10,20,30}
System.out.println(arr[3]);
//程序报错 因为在arr这个数组里面 索引最大就到2 这里输出arr下索引为3的值 所以报错
//牢记索引是从0开始的
空指针异常:数组指向的内存地址不存在或者指向了一个为null的内存地址
int [] arr=null;
System.out.println(arr);
//程序报错 空指针异常 null表示空值 数组指向一个空值无法实现数据的存储 所以程序报错
输出某列表数中最大的数
//给定一列数 输出这一列数中最大的数 10 50 78 65 90
//创建int类型的数组用于存储这列数
int [] a= {10,50,78,65,90};//采取静态初始化的方式存储
/*定义一个int类型的变量用于存储最大值 这个变量可以使用这个数组中的第一个数 用于后期的比较 如果后满遍历出来的数比这个数大则代替它 最后输出这个数
*/
int max=arr[0];
for(int i =1;i<arr.length; i++){
if(arr[i]>max){
max=arr[i]
}
}
System.out.println(max);
/*使用for循环对这个数组进行遍历 使用if语句将遍历出来的数据与外面定义的变量进行比较 如果大于它则替换掉 最后输出max变量
*/