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

文章目录

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java-10】深入浅出线程安全、死锁、状态、通讯、线程池

主要内容 线程安全线程死锁线程的状态线程间通讯线程池 1 线程安全 1.1 线程安全产生的原因 多个线程在对共享数据进行读改写的时候&#xff0c;可能导致的数据错乱就是线程的安全问题了 问题出现的原因 : 多个线程在对共享数据进行读改写的时候&#xff0c;可能导致的数据…

第五十天学习记录:C语言进阶:位段

位段 什么是位段 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 1、位段的成员可以是int,unsigned int或signed int。 2、位段的成员名后边有一个冒号和一个数字。 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>//位段-二进制位 struct A {int …

GoWeb -- gin框架的入门和使用(2)

前言 书接上回&#xff0c;在gin的框架使用中&#xff0c;还有着许多方法以及它们的作用&#xff0c;本篇博客将会接着上次的内容继续记录本人在学习gin框架时的思路和笔记。 如果还没有看过上篇博客的可以点此跳转。 map参数 请求url&#xff1a; http://localhost:8080/us…

什么是IPAM?如何使用IPAM来管理IP地址和DHCP?

在计算机网络中&#xff0c;IPAM&#xff08;IP Address Management&#xff09;是一种用于管理IP地址和DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;的工具或系统。IPAM旨在简化和集中管理IP地址分配、子网划分和DHCP配置等任务。本文将详细介绍IPAM的概…

奇偶分频电路

目录 偶数分频 寄存器级联法 计数器法 奇数分频 不满足50%占空比 50%占空比 偶数分频 寄存器级联法 寄存器级联法能实现2^N的偶数分频&#xff0c;具体做法是采用寄存器结构的电路&#xff0c;每当时钟上升沿到来的时候对输出结果进行翻转&#xff0c;以此来实现偶数分…

chatgpt赋能python:Python中日期转换:从字符串到日期对象

Python中日期转换&#xff1a;从字符串到日期对象 作为一个经验丰富的Python工程师&#xff0c;日期转换在我的日常编码工作中经常遇到。Python提供了一些内置函数和模块&#xff0c;可以将字符串转换为日期对象或将日期对象格式化为特定的字符串。本篇文章将带您深入了解Pyth…

【JavaSE】Java基础语法(二十二):包装类

文章目录 1. 基本类型包装类2. Integer类3. 自动拆箱和自动装箱4. int和String类型的相互转换 1. 基本类型包装类 基本类型包装类的作用 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据常用的操作之一&#xff1a;用于基本数据类型与字符串之间的…

黑马Redis视频教程实战篇(三)

目录 一、优惠券秒杀 1.1 全局唯一ID 1.2 Redis实现全局唯一ID 1.3 添加优惠卷 1.4 实现秒杀下单 1.5 库存超卖问题分析 1.6 代码实现乐观锁解决超卖问题 1.7 优惠券秒杀-一人一单 1.8 集群环境下的并发问题 二、分布式锁 2.1 基本原理和实现方式对比 2.2 Redis分布…

【计算思维题】少儿编程 蓝桥杯青少组计算思维真题及详细解析第6套

少儿编程 蓝桥杯青少组计算思维真题及详细解析第6套 1、兰兰有一些数字卡片,从 1 到 100 的数字都有,她拿出几张数字卡片按照一定顺序摆放。想一想,第 5 张卡片应该是 A、11 B、12 C、13 D、14 答案:C 考点分析:主要考查小朋友们的观察能力和数学推理能力,从给定的图…

交换机的4种网络结构方式:级联方式、堆叠方式、端口聚合方式、分层方式

交换机是计算机网络中重要的网络设备之一&#xff0c;用于实现局域网&#xff08;LAN&#xff09;内部的数据转发和通信。交换机可以采用不同的网络结构方式来满足不同的网络需求和拓扑结构。本文将详细介绍交换机的四种网络结构方式&#xff1a;级联方式、堆叠方式、端口聚合方…

特瑞仕|关于无线射频

无线射频&#xff08;Radio Frequency, RF&#xff09;是指在一定频率范围内&#xff0c;通过无线电波进行通信和传输信息的技术。随着移动通信、物联网、智能家居等领域的不断发展&#xff0c;无线射频技术已经成为现代社会中不可或缺的一部分。本文将从以下几个方面对无线射频…

230530-论文整理-课题组2

对这些研究有点兴趣颇微。 文章目录 Rethinking Dense Retrieval’s Few-Shot AbilityDecoder-Only or Encoder-Decoder? Interpreting Language Model as a Regularized Encoder-DecoderPLOME: Pre-training with Misspelled Knowledge for Chinese Spelling CorrectionRead…

一般小型企业,一个CRM系统要多少钱?都有哪些功能?

客户关系管理crm多少钱一套&#xff1f; 不同CRM要价不同&#xff0c;甚至同一款CRM产品在不同客户方部署下来的价格也是有差别的。 这篇给大家分享几款可实操的CRM管理软件的价位&#xff0c;有需要的可以做以参考&#xff01; 一、简道云CRM管理系统 模版地址&#xff1a;…

《开箱元宇宙》爱心熊通过 The Sandbox 与粉丝建立更紧密的联系

你们有没有想过 The Sandbox 如何融入世界上最具标志性的品牌和名人的战略&#xff1f;在本期《开箱元宇宙》系列中&#xff0c;我们与 Cloudco Entertainment 的数字内容顾问 Derek Roberto 聊天&#xff0c;了解为什么爱心熊决定在 The Sandbox 中试验 web3&#xff0c;以及他…

day1 - OpenCV安装与环境配置

本期我们介绍 OpenCV 的背景知识以及如何安装 OpenCV 。 完成本期内容&#xff0c;你可以&#xff1a; 了解 OpenCV 的背景知识掌握安装 OpenCV 及其拓展库 若要运行案例代码&#xff0c;你需要有&#xff1a; 操作系统&#xff1a;Ubuntu 16 以上 或者 Windows10 工具软件…

红米8a,刷机到安卓调用之路

什么是BL锁&#xff1f; https://baijiahao.baidu.com/s?id1614459630284912892&wfrspider&forpc bl锁简单来说&#xff0c;就是厂商为了自己的目的&#xff0c;为了避免刷机&#xff0c;而人为设置的一道障碍&#xff0c;我的第一步就需要等待168小时&#xff0c;经…

车载ECU休眠唤醒-TJA1145

前言 首先&#xff0c;请教大家几个小小问题&#xff0c;你清楚&#xff1a; 什么是TJA1145吗&#xff1f;你知道休眠唤醒控制基本逻辑是怎么样的吗&#xff1f;TJA1145又是如何控制ECU进行休眠唤醒的呢&#xff1f;使用TJA1145时有哪些注意事项呢&#xff1f; 今天&#xff…

Java学习笔记20——内部类

内部类 内部类的访问特点内部类的形式成员内部类局部内部类匿名内部类匿名内部类在开发中使用 内部类是类中的类 内部类的访问特点 1.内部类可以直接访问外部类的成员&#xff0c;包括私有成员 2.外部要访问内部类的成员&#xff0c;必须创建对象 内部类的形式 成员内部类 …

IMX6ULL平台的I2C

IMX6ULL平台的I2C 文章目录 IMX6ULL平台的I2C概述模式和操作 外部信号时钟功能描述I2C系统配置仲裁程序时钟同步信号交换外围总线访问复位中断字节顺序 初始化初始化序列启动的生成传输后软件响应停止的生成重复启动的生成从模式仲裁失败软件限制 I2C内存映射/寄存器定义I2C地址…

Windows操作系统的文件组织结构和计算方法

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下Windows操作系统的文件组织结构和计算方法。 这是一块非常实用的知识&#xff0c;感谢大家来看这个帖子。 Windows组织结构就是文件的组织形式&#xff0c;其中&#xff1a; 1.Windows逻辑结构…