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,一经查实,立即删除!

相关文章

linux tar 压缩文件 排除对应的目录 exclude

有时候需要压缩多个目录,其中 有的目录中携带uploads 目录 如web里面有个uploads目录,我想要屏蔽掉 使用exclude 屏蔽目录 命令如下: tar -czvf archive.tar.gz --excludeweb/uploads/* --excludelogs/ web/ web1/* 错误的命令: tar -czvf archive.tar.gz --exclud…

rush 功能特性梳理

Rush 可以让 JavaScript 开发者更轻松地同时构建、发布多个 NPM 包&#xff0c;即将多个包或项目放到一个大仓库下管理。 仅需一次 NPM 安装 仅需一步&#xff0c;Rush 便可以将你项目的所有依赖安装到一个公共文件夹下&#xff0c;该文件夹并不像 “package.json” 一样位于项…

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.添加远程…

Tomcat闪退

Tomcat闪退可能由多种原因引起&#xff0c;包括内存不足、程序异常、端口冲突、配置文件错误、版本不兼容、硬件故障等。以下是一些解决Tomcat闪退问题的常见方法&#xff1a; 检查内存&#xff1a;Tomcat运行需要大量的内存资源。如果服务器内存不足&#xff0c;可以尝试增加…

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

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

text-align、align-items 和 justify-content

当我们使用 CSS 来控制布局时&#xff0c;我们可以采用一些通用的属性来控制文本、元素等在页面上的位置和对齐方式。下面是关于 text-align、align-items 和 justify-content 的通用总结 text-align&#xff1a; 适用范围&#xff1a; 适用于文本元素&#xff0c;如 <p>…

Win10安装mamba个人总结的2种实现方式

强烈推荐大家参考这篇文章&#xff0c;讲述的完整且全面。 Mamba 环境安装踩坑问题汇总及解决方法_error: could not build wheels for causal-conv1d, w-CSDN博客 我的环境是win10&#xff0c;Pycharm2019&#xff0c;miniconda&#xff0c;Python 3.10.14&#xff0c;cuda …

c语言指针学习:交换变量值1

交换地址和交换指针 //交换pt_x和pt_y所指向的地址int *temp;temp pt_x; pt_x pt_y; pt_y temp; //交换pt_x和pt_y的值int temp;temp *pt_x; *pt_x *pt_y; *pt_y temp; 假如没有指针p int i1; p&i; //p指的是所指向变量的地址 即 i的地址 //*p指的是指针所指…

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

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

springboot报错‘url’ attribute is not specified and no embedded datasource could

APPLICATION FAILED TO START Description: Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class Action: Consider the following: If you wa…

你是学会了还是学废了: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;最后通过代码实现数据的写…

【车载开发系列】AUTOSAR BSW基础模块常用术语

【车载开发系列】AUTOSAR BSW基础模块常用术语 BSW供应商提供的AUTOSAR BSW模块有&#xff1a;EcuM、Os、WdgM、WdgIf、BswM、Rte这六种。AUTOSAR BSW当中常用的属于如下。 名称说明WdgMWatchdog Manager的简称WdgIfWatchdog Interface的简称BswMBasic Software Manager的简称…

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

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

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

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

Batch Normalization 批归一化 每个mini-batch进行归一化操作 显著提高深度神经网络的训练速度和性能

Batch Normalization Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift NLP相关Paper笔记和代码复现 本文提出了Batch Normalization(批标准化)技术,旨在加速深度神经网络的训练过程,并通过减少内部协变量偏移(internal…

图文教程 | 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;这个段可以是秒级、分钟级、…