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

news2025/1/5 9:38:05

文章目录

    • 🍸1.1 数组介绍
    • 🍸1.2 数组的动态初始化
    • 1.2.1 什么是动态初始化
    • 1.2.2 动态初始化格式
    • 🍸1.3 数组元素访问
      • 1.3.1 什么是索引
      • 1.3.2 访问数组元素格式
      • 1.3.3 示例代码
    • 🍸1.4 内存分配
      • 1.4.1 内存概述
      • 1.4.2 java中的内存分配
    • 🍸1.5 Java内存分配-一个数组内存图
    • 🍸1.6 两个数组内存图
    • 🍸1.7 多个数组指向相同内存图
    • 🍸1.8 数组的静态初始化
      • 1.8.1 什么是静态初始化
      • 1.8.2 静态初始化格式
      • 1.8.3 示例代码
    • 🍸1.9 数组操作的两个常见问题
      • 1.9.1 索引越界异常
      • 1.9.2 空指针异常
    • 🍸1.10 数组遍历
    • 🍸1.11 数组获取最大值
    • 🍸1.12 数组元素求和


在这里插入图片描述


🍸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);
	}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/562064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu crontab 遇到的sh脚本一些问题(手动执行可以,自动执行不行)

问题一&#xff1a; 问题描述&#xff1a; 在写一个脚本循环时候&#xff0c;出现“let:not found”,这是因为在ubuntu默认是指向bin/dash解释器的,dash是阉割版的bash,其功能远没有bash强大和丰富.并且dash不支持let和i等功能. 解决办法&#xff1a; 打开一个终端输入&#xf…

springboot基于Java的校园二手物品交易平台jspm9qw4i

本基于Java的校园二手物品交易平台采用Java语言和Jsp技术&#xff0c;框架采用SPRINGBOOT&#xff0c;搭配Mysql数据库&#xff0c;运行在Idea里。本系统针对校园二手商品的交易而开发&#xff0c;提供管理员、学生、学生二手三种角色的服务。总的功能包括商品的查询、商品的购…

基于html+css的图展示89

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【六袆 - Redis】Redis内存数据库;redis数据结构;redis文档

Redis 关于redis 官方文档&#xff1a; https://redis.io/docs/about/ https://redis.com/redis-enterprise/data-structures/ 关于redis Redis: 是一个开源&#xff08;BSD 许可&#xff09;内存数据结构存储&#xff0c;用作数据库、缓存、消息代理和流引擎。Redis提供数据结…

CNVD - 5000w通用产品的收集方法

本文转载于&#xff1a;https://mp.weixin.qq.com/s?__bizMzg5OTY2NjUxMw&mid2247507214&idx1&sn0e6df46ee930cb35ab0650867cef8af5&chksmc04d5a30f73ad3261a6fa6a8cb8c4ddc4ee8fac2a58f495c05030adc2d27e3ead65264f24f75&mpshare1&scene23&srcid…

MySQL业务并发减数量,数量未减

业务背景 最近在折腾老系统&#xff0c;折腾了好久&#xff0c;发现一个数据库问题&#xff0c;用户点赞数量&#xff0c;如果用户取消点赞情况下&#xff0c;正常情况10次取消数据库都返回成功&#xff0c;但其中有2次没有取消。 数据库场景 在MySQL中看下面一个场景。 业务…

jQuery操作练习-隔行变色

<!DOCTYPE HTML> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <title>jQuery操作练习-隔行变色</title> <script type"text/javascript&q…

越来越好玩,用ChatGPT+Python 做有声小说!

菜鸟学Python-第623篇原创 现在我们几百人的会员群已经玩的越来越高级了&#xff0c;利用chatgpt花色玩法&#xff01;有玩百度问一问每天早上6点多起来抢单的&#xff0c;有玩微信机器人帮人部署接单的&#xff0c;也有玩咸鱼去给大学生指导论文的&#xff01; 利用chatgpt4玩…

USB设备连接和枚举

https://space.bilibili.com/489340606/channel/collectiondetail?sid896957 以下图片来自于沁恒微电子蔡亮工程师的讲课&#xff0c;对USB开发入门很有好处。 1. USB主设备和从设备 2. USB设备按功能分类 3. USB功能设备内部架构 可以有多个配置&#xff0c;但同一个时间只…

华为OD机试真题 Java 实现【字母组合】【2023Q1 200分】

一、题目描述 每个数字对应多个字母&#xff0c;对应关系如下&#xff1a; 0&#xff1a;a,b,c 1&#xff1a;d,e,f 2&#xff1a;g,h,i 3&#xff1a;j,k,l 4&#xff1a;m,n,o 5&#xff1a;p,q,r 6&#xff1a;s,t 7&#xff1a;u,v 8&#xff1a;w,x 9&#xff1a;y, z …

PostGIS的10个最佳实践

PostGIS 是一个功能强大的开源空间数据库&#xff0c;可用于存储、查询和分析地理空间数据。 对于需要存储和分析大量地理空间数据的组织来说&#xff0c;这是一个流行的选择。 但是&#xff0c;正确使用 PostGIS 以充分利用它很重要。 在本文中&#xff0c;我们将讨论 10 个 …

Mit6.006-lecture09-Breadth-First-Search

一、新单元&#xff1a;图 Quiz 1包含lecture01到lecture08&#xff0c;关注数据结构和排序 今天开始新单元&#xff0c;lecture09-lecture14&#xff0c;关注图算法 二、图应用 图无处不在 任何网络系统都存在有向连接图 比如&#xff1a;路网、计算机网络、社交网络 任…

1146 Topological Order(31行代码+详细注释)

分数 25 全屏浏览题目 作者 CHEN, Yue 单位 浙江大学 This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topological order obtained from the given directed graph? Now you are supposed to write a program to test …

Elasticsearch:在 Elastic 中访问机器学习模型

作者&#xff1a;Bernhard Suhm, Josh Devins Elastic 支持你需要的机器学习模型 Elastic 让你可以应用适合你的用例和 ML 专业水平的机器学习 (ML)。 你有多种选择&#xff1a; 利用内置的模型。 除了我们的可观察性和安全解决方案中针对特定安全威胁和系统问题类型的模型外…

Ubuntu crontab定时任务

1. crontab 相关的命令&#xff1a; 安装&#xff1a;apt-get install cron 启动&#xff1a;service cron start 重启&#xff1a;service cron restart 停止&#xff1a;service cron stop 检查状态&#xff1a;service cron status 查询cron可用的命令&#xff1a;service …

【算法排序】直接插入排序

目录 一、概念及其介绍二、过程图示三、复杂度以及稳定性四、代码实现 一、概念及其介绍 插入排序(InsertionSort)&#xff0c;一般也被称为直接插入排序。 对于少量元素的排序&#xff0c;它是一个有效的算法。插入排序是一种最简单的排序方法&#xff0c;它的基本思想是将一…

Keil(MDK-ARM)如何补充安装旧的编译器 AC5(ARM Compiler 5)

目录 一、前言二、下载1. 进入 Arm Developer 官网2. 下载 ARM Compiler 5 安装包3. 下载完成 三、安装1. 开始安装2. 安装过程3. 安装完成 四、配置1. 打开“Manage Project Items”2. 添加 ARM Compiler 5 编译器3. 添加成功4. 选择 ARM Compiler 5 作为当前使用的编译器 一、…

PHP+vue二手车交易信息网站系统

原来二手车网站由于二手车网站制度的不完善&#xff0c;许多城市的二手车网站市场都很少&#xff0c;而且欺诈行文较严重&#xff0c;肆意提高价格&#xff0c;隐瞒汽车所存在的故障问题&#xff0c;人们买卖二手车还是经过朋友帮忙介绍的途径来实现。这就导致了很多人的想卖车…

GitLab服务器搭建

文章目录 前述方式一&#xff1a;非容器安装搭建GitLab服务器查看gitlab用户的初始密码&#xff1a;修改初始密码gitlab配置文件修改服务的端口号启动并访问服务 方式二&#xff1a;容器下安装基于Docker安装Docker在容器中安装gitlab服务宿主机配置修改容器配置修改启动并访问…

SpringBoot如何优雅的实现参数验证

唠嗑部分 在我们设计接口时&#xff0c;参数验证是必不可少的一个环节&#xff0c;严格的参数验证能够保证数据的严谨&#xff0c;那么在SpringBoot项目中&#xff0c;你是如何验证参数的呢&#xff1f; 首先我们来描述一下需求 用户类&#xff0c;有用户名、用户头像、邮件…