第六课:数组和字符串
一、数组的定义与格式
1、定义:存储同一种数据类型的多个元素的容器
2、格式:
- 数据类型[ ] 数组名; eg. int [] a; 定义一个int类型的数组a变量
- 数据类型 数组名[ ]; eg. int a [ ] ; 定义一个int类型的a数组变量
二、数组的初始化
1、动态初始化
-
初始化时只指定数组长度,由系统为数组分配初始值
-
格式:数据类型[ ] 数组名= new 数据类型[数组长度]
int []arr = new int[3]; //定义了一个int类型的数组,这个数组中可以存放3个int类型的值
*补充知识 ——Java中的内存分配
Java程序在运行的时候,需要在内存中分配空间,为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理方式和内存管理方式
区域 | 所存内容 |
---|---|
栈(stack) | 存储局部变量(基本类型的变量和对象的引用变量) |
堆(heap) | 存储new出来的东西(对象和数组) |
方法区 | |
本地方法区 | 和操作系统有关 |
寄存器 | 给CPU使用 |
局部变量:在方法定义中或者方法声明上的变量都称为局部变量
堆内存的特点:
-
①每一个new出来的东西都有地址值
-
②每个变量都有默认值:
byte,short,int,long默认为0;
float,double默认为0.0;
char默认为\u0000;
booean默认为false;
除此之外的引用类型默认null
-
③堆内存使用完毕就变成垃圾,但是并没有立即回收,会在垃圾回收器空闲的时候回收(栈内存的数据是用完就释放掉)
2、静态初始化
-
初始化时只给出初始值,由系统决定数组长度
-
格式:数据类型 [] 数组名 = new 数据类型 [ ] {元素1,元素2…};
int[] arr = new int[] { 1,2,3}; //定义了一个int类型的数组,这个数组中可以存放三个int类型的值,并且值分别是1,2,3 int[] arr = { 1,2,3}; //简化的写法
三、数组操作的常见问题
1、下标越界
数组下标由0开始,n个元素的数组下标最大是array[n-1],很容易写成array[n],这样就会下标越界。
2、空指针异常
//引用类型的常量,空常量,null
arr = null;
System.out,println(arr[0]);
此时数组为空常量,相当于数组名是个空指针,已经不再指向堆内存了,而我们依旧用了数组名去访问元素,就会导致空指针异常。
3、待补充。。。
四、数组的相关算法
1、数组的遍历
Java提供了数组长度属性,直接数组名.length就可以获取数组长度,常用作循环遍历数组的结束控制条件
for(int i=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
2、获取数组的最大值
//求数组最大值的方法
public static int getMax(