Java基础——数组

一、数组的构成

  • 数组名
  • 元素
  • 角标、下标(索引)
  • 数组的长度

二、数组的特点

  • 数组是有序列的
  • 数组属于引用数据类型变量,数组的元素 既可以是基本数据类型也可以是引用数据类型
  • 创建数据对象会在内存中开辟一整块连续的空间
  • 数组的长度一旦确定,就不能修改

三、数组的分类

  • 维数:一维、二维…
  • 按照数组元素的类型:基本、引用

四、一维数组的使用

  • 一维数组的使用:
  • 一位数组的声明和初始化
    int num;  //声明
    num = 10; //初始化
	int id = 1001;
//静态初始化:数组的初始化和数组元素的赋值操作同时进行
	int[] ids; //声明
	ids = new int[]{1001,1102,103,1004};//初始化
//动态初始化:数组的初始化和数组元素赋值操作分开进行
	String[] names = new String[5];

总结:数组一旦初始化完成,其长度就确定了

  • 如何调用数组指定位置的元素
    通过调用数组:角标、下标(索引)
//数组的角标从0开始到数组的length-1结束
	names[0] = "张三";
	names[1] = "李四";
	names[2] = "王五";
	names[3] = "11";
	names[4] = "22";
  • 如何获取数组的长度
//获取数组的长度:length
	System.out.println(names.length);
  • 如何遍历数组
//遍历数组
	for(int i = 0;i < names.length;i++){
    System.out.println(names[i]);
  • 数组元素的默认初始化值
    数组的默认初始化值
    整型:默认值都是0
    浮点型:默认值0.0
    char:ASCI码对应的 0 而非’0’
    boolean:false
    引用数据类型:null
    测试用例:
public class Text2 {
	public static void main(String[] args){
		int[] arr = new int[4];
		for(int i = 0;i < arr.length;i++){
			System.out.println(arr[i]);
		}
		
		short[] arr1 = new short[4];
		for(int i = 0;i < arr1.length;i++){
			System.out.println(arr[i]);
		}
		
		float[] arr2 = new float[4];
		for(int i = 0;i < arr2.length;i++){
			System.out.println(arr[i]);
		}
		
		char[] arr3 = new char[4];
		for(int i = 0;i < arr3.length;i++){
			System.out.println("**"+arr[i]+"**");
		}
		
		boolean[] arr4 = new boolean[4];
		System.out.println(arr3[0]);
	}
}

五、数组的内存分配
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
六、多维数组

  • 二维数组的使用
    1.初始化
//静态初始化
	int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};
//动态初始化
		String[][] arr1 = new String[3][2]; //1
		String[][] arr2 = new String[3][];  //2
//特殊写法(也正确)
	int[] arr = {1,2,3,4};
	int[][] arr = {{1,2,3},{4,5},{6,7,8}};

2.调用多维数组

//调用多维数组
	System.out.println(arr[0][1]);
	arr2[1] = new String[4];//一行划分四个

3.获取长度

System.out.println(arr.length);//结果:3
System.out.println(arr[0].length);//结果:3
System.out.println(arr[1].length);//结果:2

4.遍历二维数组

//遍历二维数组
		for(int i = 0;i <= arr.length;i++){
			for(int j = 0;j < arr[i].length;j++){
				System.out.print(arr[i][j]+" ");
			}
			System.out.println();
		}
  • 规定:二维数组分为外层数组的元素和内层数组的元素
  • int[][] arr = new int[4][3];
    
  • 外层元素:arr[0],arr[1]等
    
  • 内层元素:arr[]0[0],arr[1][2]等
    
  • 数组元素的默认初始化值
    外层初始化值为地址
    内层初始化值与一维初始化值一样
    测试:
public class Text5 {
	public static void main(String[] args) {
		int[][] arr = new int[4][3];
		System.out.println(arr[0]);     //地址 [I@15db9742
		System.out.println(arr[0][0]);  //0
		System.out.println(arr);        //[[I@6d06d69c
	}
}
  • 数组内存解析
    在这里插入图片描述
    七、Arrays工具类的使用
public class Text1 {
	public static void main(String[] args) {
	
		//1.boolean equals(int[] a,int[] b) 判断两个数组是否相等
		int[] arr1 = new int[]{1,2,3,4};
		int[] arr2 = new int[]{1,3,2,4};
		boolean isEquals = Arrays.equals(arr1,arr2);
		System.out.println(isEquals);
		
		//2.String toString(int[] a) 输出数组信息
		System.out.println(Arrays.toString(arr1));
		
		//3.void fill(int[] a,int val) 将指定的值填充到数组中
		Arrays.fill(arr1, 10);
		System.out.println(Arrays.toString(arr1));
		
		//4.void sort(int[] a) //排序
		Arrays.sort(arr2);
		System.out.println(Arrays.toString(arr2));
		
		//5.int binarySearch(int[] a,int key) //二分查找
		//int[] arr = new int[]{-87,23,16,95,74,22,45,46,221}; 二分查找必须是有序数组
		int[] arr = new int[]{-98,23,37,45,89,222,312};
		int index = Arrays.binarySearch(arr, 45);
		System.out.println(index); //如果是负数 则说明没找到
		
	}
}

八、数组中的常见异常

  • 1.数组角标越界异常:ArrayIndexOutOfBoundsException
  • 2.空指针异常: NullPointerException
    测试:
public class Text2 {
	public static void main(String[] args) {
		
		//1.数组角标越界的异常
		int[] arr = new int[]{1,2,3,4,5};
		for(int i = 0;i < arr.length;i++){
			System.out.println(arr[i]);
		}
		
		//2.空指针异常
//		情况一
//		int[] arr1 = new int[]{1,2,3};
//		arr1 = null;
//		System.out.println(arr1[0]);
		
//		int[][] arr2 = new int[4][];
//		System.out.println(arr2[0]);
        
//		情况二
//		int[][] arr2 = new int[4][];
//		System.out.println(arr2[0][0]);
		
//      情况三
//		String[] arr3 = new String[]{"AA","BB","CC"};
//		arr3[0] = null;
//		System.out.println(arr3[0].toString());
        
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值