数组
1.数组的定义
数组就是用来存储一批同类型数据的内存区域(可以理解成容器)。
使用数组的原因:
- 没有数组:存在多个变量,需要声明多个变量的名称,这些名称之间没有什么关系和规律。想访问所有的变量,就比较困难。
- 有了数组:只需要有一个数组容器的名称,容器里面有通过数字表示的位置。位置的数字有规律。可以通过容器名称结合位置数字的方式,访问到某个变量。非常容易的访问所有的变量。通过有规律的索引,来访问没有规律的元素。
数组的定义:
- 元素的数据类型[] 数组名称 = new 元素的数据类型[数组容器的大小]//首选方法
详细解释:
- 元素:数组中的数据、数组中的变量
- 元素的数据类型:数组中的数据的数据类型,用于决定每个空间的大小
- []:表示是一个一维数组
- 数组名称:数组本身也是一个变量,用于存储数组的地址变量。
- =:赋值符号,将数组的地址,赋值给数组的名称
- new:用于在堆内存中开辟空间
- 元素的数据类型:和前面的数据类型保持一致
- 数组容器的大小:可以存储的数据的个数
2.数组的初始化
为数组分配内存空间,并且赋值
分类:动态初始化、静态初始化
- 
动态初始化:定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据 - 
元素的数据类型 [] 数组名称 = new 元素的数据类型[数组元素的个数]; 
- 
元素的赋值方式: 
 数组名称[元素的索引]=元素值;
- 
索引: 
 元素在数组中的位置的数字,别名:下标、角标、脚标;从0开始
- 
注意事项: 
 所有的元素,都需要逐个赋值
 如果数组中的元素,没有赋值,元素也有一个默认的初始化值,整数为0
 
- 
- 
静态初始化:定义数组的时候直接给数组赋值 - 元素的数据类型[] 数组名称 = new 元素的数据类型[]{元素值的罗列};
- 注意事项:
 第二个方括号中,不要填写数组元素的个数
 元素值的罗列,元素和元素之间,使用逗号分隔。写了几个元素,就分配多大空间。
 罗列出来的元素值,数据类型必须和声明的数组元素的数据类型一致
 静态初始化有一个简写格式: 元素的数据类型[]数组名称={元素值的罗列};
 
获取数组的长度:数组名.length()

3.数组的异常
数组索引越界异常
- 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:3 
 数组下标越界异常
- 
原因:访问了数组中,不存在的索引。数组索引的范围是0~长度-1,超过了这个范围都是越界 
- 
避免:不要访问不存在的索引 
空指针异常
- Exception in thread "main" java.lang.NullPointerException
 空指针异常
- 原因:当引用不再指向任何的堆内存中的数据时,仍要通过这个引用访问堆内存中的数据,只能抛出异常
- 避免:在使用引用前,可以先判断是否为null,不为null的时候去访问
4.数组的四个基本特点
数组的四个基本特点:
- 其长度是确定的。数组一旦被创建,它的大小就是不可改变的。
- 其元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
- 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象 类型,数组对象本身是在堆中。
5.数组的遍历
for-each循环
	for(数据类型 元素名称 : 数组名){
		循环体
	}
数组作为方法入参
	方法名(数据类型[] 数组名){
		方法体
	}
数组作为返回值
	return 数组名
import java.util.Random;
import java.util.Scanner;
public class ArrayDemo {
    public static void main(String[] args) {
        //生成一个长度为5的随机数数组,猜数组中的数字,猜对一个,将整个数组输出
        int[] nums = new int[5];
        Random rd = new Random();
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < nums.length; i++) {
            nums[i] = rd.nextInt(20) + 1;
        }
        OUT :
        for (; ; ) {
            System.out.println("请输入数字:");
            int num = sc.nextInt();
            for (int j = 0; j < nums.length; j++) {
                if (nums[j] == num){
                    System.out.println("恭喜你,猜对了");
                    break OUT;
                }
            }
        }
        System.out.println("数组为:");
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i]+"  ");
        }
    }
}
输出结果:

数组排序技术:
- 冒泡排序(每次从数组中找出最大值放在数组的最后面去)
- 选择排序
- 快速排序
- 插入排序
数组搜索技术:
- 二分搜索
- 分块查找
- 哈希表查找
6.多维数组

7.Arrays类
数组的工具类java.util.Arrays
由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本操作
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号