Java05基础 数组

Java05数组

一、数组

数组指的是一种容器,可以用来存储同种数据类型的多个值。

1、数组的静态初始化

初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程

1.1 数组定义格式

//格式一
数据类型[] 数组名
    
//格式二(C中用的多,Java用的少)
数据类型 数组名[]

注意:定义数组只是定义了数组类型的变量而已,内存中并没有正真将数组容器创建出来,还需要初始化内存才会为数组容器开辟空间。

1.2 静态初始化
  • 完整格式

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

int[] array = new int[]{11,22,33};
double[] array2 = new double[]{11.1,22.2,33.3};
  • 简化格式(常用)

简化格式只是简化了代码书写,运行还是会按照完整格式运行
数据类型[] 数组名 = {元素1,元素2,元素3,...};
 

int[] array = {11,22,33};
double[] array2 = {11.1,22.2,33.3};
1.3 注意事项
public class ArrayDemo1 {public static void main(String[] args) {int[] arr1 = new int[]{11,22,33};double arr2[] = {11.1,22.2,33.3};
​System.out.println(arr1);System.out.println(arr2);}
}

打印数组名,会看到数组在内存中的十六进制地址值

2、数组元素访问

格式:数组名[索引]

索引:是数组容器中空间的编号,编号从0开始,逐个+1增长;

public class ArrayDemo1 {public static void main(String[] args) {//char类型的a取值范围小,int类型取值范围大,可以这样存,但没必要int[] arr1 = new int[]{11,22,33,'a'};int num = arr[0];System.out.println(num)}
}
​
//运行结果为11

3、数组遍历操作

3.1 遍历

将数组中所有的内容取出来,取出来之后可以(打印、求和、判断...)

public class ArrayDemo3 {public static void main(String[] args) {int[] arr = {11,22,33,44,55};
​//arr.length动态获取数组长度for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}
}

快捷键:数组名.fori 回车

3.2 综合案例(求和最大最小值)
public class ArrayTest2 {public static void main(String[] args) {int[] arr = {33,11,55,44,22};int max = arr[0];  //定义记录最大值的变量,初始值为数组的第一个元素int min = arr[0];   //定义记录最小值的变量,初始值也为数组第一个元素int sum = 0;     //定义求和变量
​for (int i = 0; i < arr.length; i++) {//数组元素大于最大值if(arr[i]>max){//更新最大值max=arr[i];}//数组元素小于最小值if(min>arr[i]){//更新最小值min = arr[i];}//累加数组变量sum+=arr[i];}//循环结束,打印结果System.out.println("最大值为:"+max);System.out.println("最小值为:"+min);System.out.println("数组元素和为:"+sum);}
}

4、数组动态初始化

初始化时只指定数组长度,由系统为数组分配初始值

4.1 格式

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

int[] arr = new int[3];
4.2 默认初始值
数据类型默认初始值
整数(基本类型)0
小数(基本类型)0.0
字符(基本类型)'\u0000' 常见体现为空白字符
布尔(基本类型)false
类、接口、数组(引用类型)null
4.3 ⭐两种初始化的区别
动态初始化静态初始化
手动指定数组长度手动指定数组元素
系统给出默认初始化值系统会根据元素个数计算数组长度

Q如何选择?(使用场景)

  • 需求中已经明确给出要操作的数据时,直接静态初始化

  • 只明确元素个数,不明确具体数值时,使用动态初始化

5、数组内存图

5.1 Java内存分配介绍
  • 方法运行时所进入的内存,方法运行结束要弹栈

  • new出来的东西会在这块内存中开辟空间并产生地址值

  • 方法区

    字节码文件加载时进入的该内存

  • 本地方法栈

    属于栈内存的一部分,负责加载一些特殊的方法(native修饰的方法,底层是调用C++代码,我们是无法看到方法内部的实现逻辑)

  • 寄存器

    CPU使用

5.2 两个数组指向相同 内存图

5.3 相关面试题

  • 总结

    方法的参数传递:1、基本数据类型:数据值2、引用数据类型:地址值Q:Java是值传递,还是地址传递?
    A:分情况,基本数据类型传递数据值,引用数据类型传递地址值詹姆斯高斯林:值传递,地址值也是值

6、数组常见问题

6.1 索引越界异常

ArrayIndexOutOfBoundsException:当访问了数组中不存在的索引,就会引发索引越界异常

public class ArrayIndexOutOfBoundsExceptionDemo {public static void main(String[] args) {int[] arr = {11,22,33};System.out.println(arr[3]);}
}
6.2 空指针异常

当引用数据类型变量被赋值为null之后,地址的指向被切断,还继续访问堆内存数据,就会引发空指针异常

public class NullPointerException {public static void main(String[] args) {int[] arr = {11,22,33};arr= null;System.out.println(arr[0]);}
}

二、二维数组

一种用于存储一维数组的容器

使用思路:要操作的多组数据,又属于同一组数据,就使用二维数组进行维护

1、静态初始化

  • 完整格式

数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2},{元素1,元素2}};
int[][] arr = new int[][]{{11,22},{33,44}};
  • 简化格式

数据类型[][] 数组名 = {{元素1,元素2},{元素1,元素2}};
int[][] arr = {{11,22},{33,44}};

2、元素访问

格式:数组名[索引] [索引];

public class ArrayDemo1 {/*元素访问:数组名[m][n]m:  访问哪个一维数组n:  访问一维数组的哪个元素*/public static void main(String[] args) {int[][] arr = {{11,22,33},{44,55,66}};//打印二维数组名,会出现它所记录的一维数组的地址System.out.println(arr);//访问元素33System.out.println(arr[0][2]);}
}

3、二维数组遍历

思路:使用嵌套循环,先拿到二维数组里每个一维数组的地址,再通过遍历每个一维数组访问其中的元素,嵌套起来,就可以遍历到整个二维数的所有元素了

public class ArrayDemo2 {/*二维数组遍历需求: 求二维数组中偶数元素的和*/public static void main(String[] args) {int[][] arr={{11,22,33},{44,55,66}};//定义求和变量int sum = 0;//遍历二维数组,获取每一个一维数组for (int i = 0; i < arr.length; i++) {//arr[i]代表每一个数组//继续遍历一维数组,取出元素for (int j = 0; j < arr[i].length; j++) {if(arr[i][j]%2 == 0){//累加求和sum+=arr[i][j];}}}System.out.println(sum);}
}

4、动态初始化

  • 格式

数据类型[][] 数组名 = new 数据类型[m][n];m表示这个二维数组,可以存放多少个一维数组n表示每一个一维数组,可以存放多少个元素
int[][] arr = new int[2][3];
  • 默认初始值

    二维数组存放的是一维数组的地址值,而一维数组是引用数据类型,所以默认值为null

    数据类型默认初试值
    一维数组null

5、初始化内存图

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

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

相关文章

git 拉取指定目录

指令方式 打开 git 自带的Git Bash 工具 以拉取github中 fastjson 的 /src/test/java/oracle/sql/ 目录为例 1.创建文件夹和git 初始化 cd D:/Program\ Files mkdir fastjson cd fastjson git init 2.设置允许克隆子目录 git config core.sparsecheckout true 3.添加远程…

企业大模型如何成为自己数据的“百科全书”?

作者 | 郭炜 编辑 | Debra Chen 在当今的商业环境中&#xff0c;大数据的管理和应用已经成为企业决策和运营的核心组成部分。然而&#xff0c;随着数据量的爆炸性增长&#xff0c;如何有效利用这些数据成为了一个普遍的挑战。 本文将探讨大数据架构、大模型的集成&#xff0…

Google I/O 2024:探索未来AI技术的无限可能

近日&#xff0c;Google I/O 2024大会圆满落幕&#xff0c;带给我们一场关于人工智能的盛宴。在这场大会上&#xff0c;Google推出了一系列令人激动的AI新功能和工具&#xff0c;让我们得以一窥未来的科技发展。今天&#xff0c;就让我来为大家总结一下这些亮点吧&#xff01; …

你是学会了还是学废了:Elasticsearch 7 集群拷贝到其它环境如何重置密码

欢迎您关注我的公众号【尚雷的驿站】 公众号&#xff1a;尚雷的驿站 CSDN &#xff1a;https://blog.csdn.net/shlei5580 墨天轮&#xff1a;https://www.modb.pro/u/2436 PGFans&#xff1a;https://www.pgfans.cn/user/home?userId4159 前言 本文描述了将生产ES集群打包拷贝…

知识图谱 | 语义网络写入图形数据库(含jdk和neo4j的安装过程)

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要介绍如何使用 Neo4j 图数据库呈现语义网络&#xff0c;并通过 Python 将语义网络的数据写入数据库。具体步骤包括识别知识中的节点和关系&#xff0c;将其转化为图数据库的节点和边&#xff0c;最后通过代码实现数据的写…

css案例 tab上下滚动,左右滚动

效果图&#xff1a; 完整代码&#xff1a; <template><view class"content"><view class"content-item"><view class"content-title"><h4>美食热搜</h4><ul><li>火鸡面</li><li>糖…

听劝!普通人千万别随意入门网络安全

一、什么是网络安全 网络安全是一种综合性的概念&#xff0c;涵盖了保护计算机系统、网络基础设施和数据免受未经授权的访问、攻击、损害或盗窃的一系列措施和技术。经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”…

图文教程 | 2024年IDEA安装使用、破解教程,JDK简易下载方法

前言 &#x1f4e2;博客主页&#xff1a;程序源⠀-CSDN博客 &#x1f4e2;欢迎点赞&#x1f44d;收藏⭐留言&#x1f4dd;如有错误敬请指正&#xff01; 目录 一、IDEA安装 二、激活 三、JDK安装 四、JDK环境配置 五、验证 一、IDEA安装 进入官网下载&#xff1a; Other…

命令行中,Python 想使用本地环境,但总是显示为Anaconda的虚拟环境

电脑环境 Python 本地环境&#xff08;Python3.9.5&#xff09;Anaconda 虚拟环境&#xff08;Python3.8.8&#xff09; 遇到的问题 在cmd 中&#xff0c;我想在本地环境使用 Python、pip &#xff0c;但它却是一直识别成Anaconda的虚拟环境。 解决方法 环境变量配置中&am…

Go Gin使用JWT实现认证机制

什么是JWT JWT是JSON Web Token的缩写,是一种跨域认证的解决方案。 使用JWT解决什么问题 传统的登录认证的实现,依赖客户端浏览器的cookie和服务器的session,这种实现登录的方式有很大的局限性。 对于部署在单台服务器的应用来说,使用cookie+session登录认证的方案尚…

✅什么是时间轮?

一、问题解析 时间轮算法&#xff08;Time Wheel Algorithm&#xff09;是一种用于处理定时任务和调度的常见算法。 时间轮算法主要需要定义一个时间轮盘&#xff0c;在一个时间轮盘中划分出多个槽位&#xff0c;每个槽位表示一个时间段&#xff0c;这个段可以是秒级、分钟级、…

数据结构(十五)----排序算法(2)

目录 一.选择排序 1.简单选择排序 2.堆排序 •建立大根堆 •基于大根堆进行排序 堆排序算法效率&#xff1a; 堆排序算法稳定性&#xff1a; 3.堆的插入和删除 •在堆中插入新元素 •在堆中删除元素 二.归并排序 归并排序算法效率&#xff1a; 归并排序算法的稳定…

Reverst:基于QUIC协议和HTTP3的反向隧道工具

关于Reverst Reverst是一款功能强大的反向隧道工具&#xff0c;Reverst由一个具备负载均衡功能的反向隧道服务器和一个服务器-客户端库组成&#xff0c;该工具使用Go语言开发&#xff0c;基于QUIC和HTTP/3实现其功能。 关于QUIC和HTTP/3 QUIC&#xff0c;即快速UDP互联网连接…

队列的实现与OJ题目解析

"不是你变优秀了, 那个人就会喜欢你." 文章索引 前言1. 什么是队列2. 队列的实现3. OJ题目解析4. 总结 前言 感情可以培养是个伪命题. 如果有足够多的时间和爱, 就可以让另一个人爱上你的话, 那谁和谁都可以相爱了. 爱情之所以会让人死去活来, 是因为, 答案都写在了…

photoshop(PS)有什么快速提升工作效率的功能?或者实用功能?这里告诉你7条!

1:文件太多&#xff0c;不方便马上找到需要插入元素&#xff08;元素放入PS会发现&#xff0c;位置不知道在哪里&#xff09;&#xff0c;点击需要选中或者搭配的元素&#xff0c;ctrlV就可以快速插入目标/图层元素的位置了&#xff01; 点击当前元素&#xff0c;选中&#xf…

Linux备份---异地

参考文档&#xff1a;Linux环境实现mysql所在服务器定时同步数据文件到备份服务器&#xff08;异地容灾备份场景&#xff09;_mysql异地备份-CSDN博客 通过SSH进行连接&#xff1a; 应用服务器&#xff1a; 通过ssh-keygen -t rsay建立ssh通信的密钥 密钥建立后&#xff0c;…

边缘计算安全有多重要

德迅云安全研究发现边缘安全是对存储或处理在网络边缘的数据的保护。边缘可以用不同的方式定义&#xff0c;但一般来说&#xff0c;它包括企业直接控制之外的任何设备或位置。这可能包括传感器、连接物联网的设备和移动设备。 边缘计算正在彻底改变商业运作方式。这引发了对边缘…

SpringBoot 使用logback(多环境配置)

Logback是由log4j创始人设计的又一个开源日志组件。可用于项目日志功能。官网地址 第1步&#xff1a;添加坐标依赖 <!--logback--> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version…

Python 提取PDF表格数据并保存到TXT文本或Excel文件

目录 安装Python库 Python提取PDF表格数据并保存到文本文档 Python提取PDF表格数据并保存到Excel文档 PDF文件常用于存储和共享各种类型的文档&#xff0c;这些文档可能包括大量的数据表格。通过提取这些PDF表格数据&#xff0c;我们可以将其导入到Excel、数据库或统计软件等…

技术架构

一、单机架构 简介&#xff1a;应用服务和数据库服务共用一台服务器 出现原因:出现在互联网早期&#xff0c;访问量比较小&#xff0c;单机足以满足 架构工作原理&#xff1a;以电商为例&#xff0c;可以看到通过应用&#xff08;划分了多个模块&#xff09;和数据库在单个服…