1、数组的使用场景

要操作的数据,是同一组数据,就可以使用数组容器进行储存。
数组是一种数据类型,用来储存同一类型值。
虽然可以使用int装byte、short数据,但是建议创建相同数据类型的数组。

2、数组的定义格式

格式1:int[] arr;,比较常用。
含义:定义了一个int类型的数组变量,名称叫arr,后续还需要初始化才能使用。

格式2:int arr[];,不常用

3、数组的初始化之动态初始化

作用:在初始化的时候,需要手动指定数组的长度,系统会为数组容器分配初始值。
动态初始化格式:
数据类型[] 数组名 = new 数据类型[数组的长度]
例如:int[] arr = new int[5]
含义:通过new关键字创建了一个int类型的数组容器,该容器可以储存5个int类型的整数,该容器在内存中的位置被arr数组变量所记录。
当打印arr变量时,打印的是内存中的地址。

4、数组元素的访问

格式:int[0]
1、索引是数组中空间的编号

  • 索引从0开始
  • 索引是连续的
  • 索引逐一增加,每次加一

作用:访问数组容器中的空间位置。

5、Java中的内存分配

数组 - 图1

  • 栈内存:方法运行时,进入的内存,局部变量都会存放于这块内存当中
  • 堆方法:new出来的内容都会进入堆内存,并且会存在地址值
  • 方法区:字节码文件加载时进入的内存
  • 本地方法栈:调用操作系统的相关资源
  • 寄存器:交给CPU去使用

初始值

数据类型 默认值
整数 0
浮点数 0.0
布尔 false
字符 空字符
引用数据类型 null

引用数据类型:引用、记录了地址值的变量,所对应的数据类型,就是引用数据类型。
多个数组:每new一次,在堆内存中,都是一块新的空间,堆内存中的空间地址不会出现重复现象。
int arr2 = arr1并不会创建新的数组,而是把arr1的地址值赋值给了arr2,此时arr1和arr2指向同一数组。

6、数组的静态初始化

格式:int[] arr = new int[]{11,22,33}
简化格式:int[] arr = {44,55,66}
静态初始化和动态初始化的区别:动态初始化适用于不知道要存储的数据,但知道具体存储数据的个数时使用。静态初始化适用于知道要存储的具体数据时使用。

7、数组操作的两个常见问题

1、索引越界:访问了数组中不存在的索引对应的元素
2、空指针异常:访问的数组已经不再指向堆内存的数据
3、null:空值,引用数据类型的默认值,表示不指向任何有效对象

8、数组的遍历

获取数组长度的方法:arr.length
数组的遍历,通过循环获取数组中的所有元素。
遍历的通用格式:

  1. int[] arr = {......};
  2. for (int i = 0; i < arr.length; i++){
  3. arr[i]
  4. }

9、数组获取最值

实现步骤:
1、假设数组中的第一个元素为最大值/最小值
2、遍历数组。获取每一个元素,准备进行比较
3、如果比较的过程中,出现了比max更大的,让max记录更大值(比min更小的,让min记录更小值)
4、循环结束后打印输出

  1. public class maxOrMin {
  2. public static void main(String[] args) {
  3. int[] arr = {11, 21, 21, 22, 154, 4156};
  4. //第一步
  5. int max = arr[0];
  6. int min = arr[0];
  7. //第二步
  8. for (int i = 1; i < arr.length; i++){
  9. //第三步
  10. if (arr[i]>max){
  11. max = arr[i];
  12. }
  13. if (arr[i] < min){
  14. min = arr[i];
  15. }
  16. }
  17. //第四步
  18. System.out.println("max: " + max);
  19. System.out.println("min: " + min);
  20. }
  21. }

10、键盘输入数据,进行数组求和

  1. import java.util.Scanner;
  2. public class sum {
  3. public static void main(String[] args) {
  4. //1、创建输入对象
  5. Scanner sc = new Scanner(System.in);
  6. //2、创建动态初始化数组
  7. int[] arr = new int[5];
  8. //3、创建整型变量储存求和值
  9. int sum = 0;
  10. //4、输入5个值赋值给数组
  11. for (int i = 0; i < arr.length; i++) {
  12. System.out.println("请输入第" + (i+1) + "个值");
  13. arr[i] = sc.nextInt();
  14. }
  15. //5、进行求和
  16. for (int i = 0; i < arr.length; i++) {
  17. sum += arr[i];
  18. }
  19. //6、输出结果
  20. System.out.println("sum:" + sum);
  21. }
  22. }

11、查找

  1. import java.util.Scanner;
  2. public class lookFor {
  3. public static void main(String[] args) {
  4. //1、创建输入对象
  5. Scanner sc = new Scanner(System.in);
  6. //2、创建索引值并赋值为-1,默认在数组中找不到元素
  7. int index = -1;
  8. //3、创建静态初始化数组
  9. int[] arr = {11, 22, 255, 123, 156, 14563};
  10. //4、获取要查找的数据
  11. System.out.println("请输入要查找的数据:");
  12. int num = sc.nextInt();
  13. //5、在数组中查找
  14. for (int i = 0; i < arr.length; i++) {
  15. if (num == arr[i]){
  16. index = i;
  17. break;
  18. }
  19. }
  20. //6、打印输出索引值
  21. System.out.println(index);
  22. }
  23. }