【JavaSE】Java基础语法(五):数组详解

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。【JavaSE】Java基础语法(五):数组详解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在这里插入图片描述

🍸1.1 数组介绍

数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。

🍸1.2 数组的动态初始化

1.2.1 什么是动态初始化

数组动态初始化就是只给定数组的长度,由系统给出默认初始化值

1.2.2 动态初始化格式

数据类型[] 数组名 = new 数据类型[数组长度];

int[] arr = new int[3];

代码 :

public class Demo2Array {
	public static void main(String[] args) {
		// 数据类型[] 数组名 = new 数据类型[数组的长度];
		// 通过new关键字创建了一个int类型的数组容器, 该容器可以存储5个int类型的整数, 该容器
		被arr数组变量所记录
		int[] arr = new int[5];
		// [I@10f87f48
		System.out.println(arr);
		byte[] bArr = new byte[3];
		// [B@b4c966a
		System.out.println(bArr);
	}
}

🍸1.3 数组元素访问

1.3.1 什么是索引

每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。 这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。

1.3.2 访问数组元素格式

数组名[索引];

1.3.3 示例代码

public class Demo3ArrayIndex {
	public static void main(String[] args) {
		int[] arr = new int[3]; // 0 1 2
		System.out.println(arr); // 数组的内存地址 [I@10f87f48
		// 数组名[索引] 访问数组容器中的空间位置
		System.out.println(arr[0]); // 0 系统自动分配的默认初始化值
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println("--------------");
		// 数组名[索引]
		arr[0] = 11;
		arr[1] = 22;
		arr[2] = 33;
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
	}
}

🍸1.4 内存分配

1.4.1 内存概述

🍁内存是计算机中的重要原件,临时存储区域,作用是运行程序。

🍁我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。

🍁必须放进内存中才能运行,运行完毕后会清空内存。

🍁Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

1.4.2 java中的内存分配

目前我们只需要记住两个内存,分别是:栈内存和堆内存

在这里插入图片描述

🍸1.5 Java内存分配-一个数组内存图

在这里插入图片描述

🍸1.6 两个数组内存图

在这里插入图片描述

🍸1.7 多个数组指向相同内存图

在这里插入图片描述

🍸1.8 数组的静态初始化

1.8.1 什么是静态初始化

在创建数组时,直接将元素确定

1.8.2 静态初始化格式

完整版格式

数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};

简化版格式

数据类型[] 数组名 = {元素1,元素2,...};

1.8.3 示例代码

public class Demo1Array {
	/*
	数组静态初始化 : 初始化时指定每个数组元素的初始值,由系统决定数组长度
	完整格式:
	数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3...};
	简化格式:
	数据类型[] 数组名 = {数据1,数据2,数据3...};
	*/
	public static void main(String[] args) {
		// 数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3...};
		int[] arr = new int[]{11,22,33};
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		// 数据类型[] 数组名 = {数据1,数据2,数据3...};
		int[] arr2 = {44,55,66};
		System.out.println(arr2);
		System.out.println(arr2[0]);
		System.out.println(arr2[1]);
		System.out.println(arr2[2]);
	}
}

🍸1.9 数组操作的两个常见问题

1.9.1 索引越界异常

出现原因

public static void main(String[] args) {
	int[] arr = new int[3];
	System.out.println(arr[3]);
}

数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。

程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越

界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

解决方案

将错误的索引修改为正确的索引范围即可!

1.9.2 空指针异常

出现原因

public static void main(String[] args) {
	int[] arr = new int[3];
	//把null赋值给数组
	arr = null;
	System.out.println(arr[0]);
}

arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因
此运行的时候会抛出 NullPointerException 空指针异常。在开发中,空指针异常是不能出现的,
一旦出现了,就必须要修改我们编写的代码。

解决方案

给数组一个真正的堆内存空间引用即可!

🍸1.10 数组遍历

数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。

public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
}

以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不
行,因此我们需要改造成循环的写法。数组的索引是 0 到 lenght-1 ,可以作为循环的条件出现。

public static void main(String[] args) {
	//定义数组
	int[] arr = {11, 22, 33, 44, 55};
	//使用通用的遍历格式
	for(int x=0; x<arr.length; x++) {
		System.out.println(arr[x]);
	}
}

🍸1.11 数组获取最大值

最大值获取:从数组的所有元素中找出最大值。

实现思路

🍁定义变量,保存数组0索引上的元素

🍁遍历数组,获取出数组中的每个元素

🍁将遍历到的元素和保存数组0索引上值的变量进行比较

🍁如果数组元素的值大于了变量的值,变量记录住新的值

🍁数组循环遍历结束,变量保存的就是数组中的最大值

代码实现:

import java.util.Scanner;
public class Test2Array {
	public static void main(String[] args) {
		int[] arr = {12,45,98,73,60};
		// 1. 假设数组中的第一个元素为最大值
		int max = arr[0];
		// 2. 遍历数组, 获取每一个元素, 准备进行比较
		for(int i = 1; i < arr.length; i++){
		// 3. 如果比较的过程中, 出现了比max更大的, 让max记录更大的值
		if(arr[i] > max){
		max = arr[i];
		}
		}
		// 4. 循环结束后, 打印最大值.
		System.out.println("max:" + max);
	}
}

🍸1.12 数组元素求和

需求:键盘录入5个整数,存储到数组中,并对数组求和

思路
🍁 1.创建键盘录入对象,准备键盘录入
🍁2.定义一个求和变量,准备记录累加后的结果
🍁 3.动态初始化一个长度为5的int数组,准备存储键盘录入的数值
🍁 4.将键盘录入的数值存储到数组中
🍁 5.遍历数组,取出每一个元素,并求和
🍁 6.输出总和

代码实现

import java.util.Scanner;
public class Test3Array {
	public static void main(String[] args) {
		// 1.创建键盘录入对象,准备键盘录入
		Scanner sc = new Scanner(System.in);
		// 2.定义一个求和变量,准备记录累加后的结果
		int sum = 0;
		// 3.动态初始化一个长度为5的int数组,准备存储键盘录入的数值
		int[] arr = new int[5];
		// 4.将键盘录入的数值存储到数组中
		for(int i = 0; i < arr.length; i++){
			System.out.println("请输入第" + (i+1) + "个整数:");
			//arr[i] = 10;
			arr[i] = sc.nextInt();
		}
		// 5.遍历数组,取出每一个元素,并求和
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
		}
		// 6.输出总和
		System.out.println("sum:" + sum);
	}
}

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/162221.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!