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.hqwc.cn/news/703622.html

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

相关文章

WHAT - CSS Animationtion 动画系列(二)

目录 一、循环波浪二、关键帧呼应三、关键帧顺接四、利用 transform-origin 做拉伸五、大元素可拆分多个小元素联动六、预留视觉缓冲七、随机感&#xff1a;动画周期设置八、抛物线&#xff1a;两个内外div实现x和y向量运动 今天我们主要学习动画实现要素。 一、循环波浪 利用…

深度学习面试问题 | 降维

本文给大家带来的百面算法工程师是深度学习降维面试总结&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们还将介绍一些常见的深度学习面试问题&#xff0c;并提供参考的回答及其理论基础&#…

windows部署腾讯tmagic-editor02-Runtime

创建editor项目 将上一教程中的hello-world复制过来&#xff0c;改名hello-editor 创建runtime项目 和hello-editor同级 pnpm create vite删除src/components/HelloWorld.vue 按钮需要用的ts types依赖 pnpm add tmagic/schema tmagic/stage实现runtime 将hello-editor中…

论文阅读 - Anatomy of an AI-powered malicious social botnet

论文链接&#xff1a; https://arxiv.org/pdf/2307.16336.pdf 目录 摘要 1引言 2 相关工作 2.1 LLM驱动的网络威胁 2.2 LLM生成的内容检测 2.3 社交机器人检测 2.4 由 LLM 增强的机器人 3 Fox8僵尸网络的识别 4 特性 4.1 配置文件 4.2 社交网络 4.3内容类型 4.4放…

多维 HighChart

showHighChart.html <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><!-- js脚本都是官方的,后两个是highchart脚本 --><script type"text/javascript" src"jquery1.7.1.min.js"&g…

摸鱼大数据——Linux搭建大数据环境(安装zooKeeper和zookeeper shell命令)五

安装zookeeper软件 1.上传软件 使用CRT等客户端远程上传 zookeeper-3.4.6.tar.gz 文件到/export/software目录下 2.解压软件 [rootnode1 ~]# cd /export/software/ [rootnode1 software]# tar -xzvf zookeeper-3.4.6.tar.gz -C /export/server/ [rootnode1 software]# cd /ex…

vue使用marked和highlight.js实现代码高亮效果

marked是对markdown进行解析的插件&#xff0c;它可以把markdown语法解析成html语法&#xff0c;从而实现页面效果&#xff0c;而highlight.js是对解析出的代码实现高亮效果 效果&#xff1a; 安装&#xff1a;避免踩我走的坑&#xff0c;安装尽量按照这个版本安装 npm install…

武汉星起航:中国卖家借力亚马逊跨境电商平台,拓展全球销售市场

随着互联网技术的飞速发展&#xff0c;跨境电商已成为连接全球消费者与卖家的重要桥梁。作为全球领先的跨境电商平台&#xff0c;亚马逊凭借其强大的品牌影响力、丰富的商品资源和高效的物流体系&#xff0c;为全球消费者提供了一个便捷、安全的购物环境。在这个平台上&#xf…

DBeaver配置离线驱动

因为部署的服务器为无网环境&#xff0c;所以在服务器上使用DBeaver需要配置离线驱动 我们在有网的环境下&#xff0c;安装DBeaver。把驱动下载下来&#xff0c;然后再拷贝到没网的设备上 一、下载驱动 1.在有网的设备上&#xff0c;打开DBeaver 2.找到窗口&#xff0c;选择…

Git使用(1):介绍、克隆、推送

一、介绍与安装 1、Git是什么&#xff1f; Git是目前世界上最先进的分布式版本控制系统。工作原理 / 流程&#xff1a; workspace&#xff1a;工作区Index / Stage&#xff1a;暂存区Repository&#xff1a;仓库区&#xff08;或本地仓库&#xff09;Remote&#xff1a;远程仓…

【安全每日一讲】API是什么?解密API背后的奥秘

什么是API? API全称Application Programming Interface&#xff0c;即应用程序编程接口&#xff0c;是一些预先定义的函数&#xff0c;或指软件系统不同组成部分衔接的约定&#xff0c;用于传输数据和指令&#xff0c;使应用程序之间可以集成和共享数据资源。 简单来说&#…

Cadence 16.6 绘制PCB封装时总是卡死的解决方法

Cadence 16.6 绘制PCB封装时总是卡死的解决方法 在用Cadence 16.6 PCB Editor绘制PCB封装时候&#xff0c;绘制一步卡死一步&#xff0c;不知道怎么回事儿&#xff0c;在咨询公司IT后&#xff0c;发现是WIN系统自带输入法的某些热键与PCB Editor有冲突&#xff0c;导致卡死。 …