Java基础——数组(一维数组与二维数组)
文章目录
- 一维数组
- 声明
- 初始化与赋值
- 内存图解
- 二维数组
- 声明
- 初始化与赋值
- 内存图解
- 数组练习
数组是多个相同类型的数据按一定顺序排列的集合。
说明:
- 数组是引用数据类型,数组的元素是同一类型的任何数据类型,包括基本数据类型和引用数据类型。
- 数组的长度一旦确定,就不可变。
- 可以通过下标或索引的方式获取指定位置的元素(数组的下表是从0开始)。
- 创建数组对象会在内存开辟一整块连续的空间,而数组名中引用的是这块连续空间的地址。
一维数组
声明
- 格式一
数据类型 数组名[];
- 格式二(推荐)
数据类型[] 数组名;
初始化与赋值
- 动态初始化:数组声明且为数组元素分配空间(未赋值,即默认值)
//声明并分配空间大小
int[] val = new int[3]; //未赋值的时候默认值为0
//赋值,通过指定数组下标赋值
val[0] = "10"; //下标从0开始
val[1] = "20";
val[2] = "30";
- 静态初始化:在定义数组的同时给数组元素分配空间并赋值
//方式一
int[] temp = {15, 21}; //数组长度为2//=============================================//方式二
int[] temp = new int[]{3, 5, 7}; //数组长度为3
数组是引用类型,只要一经分配空间,其中的每个元素也被隐式初始化。对于基本数据类型数组,默认初始化值各不同(int默认为0),引用数据类型而言,默认初始化值为null。
示例:
//声明并初始化
int[] arr = new int[3];
//赋值
arr[0] = 3;
arr[1] = 5;
arr[2] = 9;
//打印输出
System.out.println(arr); //[I@4554617c 一维数组地址
如上代码所示,因为数组是引用数据类型,直接打印 arr 的结果是内存地址。
地址解析:[I@4554617c ([表示一维数组,I表示int类型,@后面是地址值)。
图示:

若此时使用arr[3]=10;进行赋值,会发现数组分配空间不够,没有3下标的空间,就会出现ArrayIndexOutOfBoundsException异常。
注意:数组的大小一旦定义则不可变,则赋值和获取的数组下标不能超过或等于(因为从0下标开始)声明定义的数组大小,否则会出现ArrayIndexOutOfBoundsException异常。
若要获取数组元素的值,需要遍历该数组,通过数组下标获取。
for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);
}
//输出:3、5、9
内存图解

二维数组
二维数组可以看成是一个一维数组作为另一个一维数组的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。像数组的元素是数组,我们暂且称为元素数组。
个人理解:

注意:数组不止二维,还可以是三维、四维……类似无限套娃。
声明
- 格式一(推荐)
数据类型[][] 数组名;
- 格式二
数据类型 数组名[][];
- 格式三(不推荐)
数据类型[] 数组名[];
初始化与赋值
- 动态初始化
//方式一
int[][] arr = new int[3][2]; //该二维数组中有3个一维数组,且每个一维数组中有2个元素数组(开头有约定名称),默认值为0
//打印输出
System.out.println(arr[0][0]); //输出:0
//赋值
arr[0][0] = 1;
//打印输出
System.out.println(arr[0][0]); //输出:1//===================================================//方式二
int[][] arr = new int[3][]; //该二维数组有3个一维数组,每个一维数组中的元素数组都是默认初始化值null
//初始化并赋值
arr[0] = new int[]{2, 4, 6};
//先初始化再赋值
arr[1] = new int[2];
arr[1][0] = 13;
//打印输出
System.out.println(arr[0][0]); //输出:2
System.out.println(arr[1][0]); //输出:13
注意:int[][] arr = new int[][3]; 非法。
- 静态初始化
//方式一
int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};//================================================//方式二
int[][] arr = new int[][]{{3,8,2},{2,7},{9,0,1,6}}; //定义一个名称为arr的二维数组,二维数组中有三个一维数组
//获取元素值
System.out.println(arr[0]); //{3,8,2}
注意:静态初始化中每个一维数组中具体元素数组都已初始化并赋值。
示例:
//动态初始化方式一,数组长度为3,元素数组长度为1
int[][] arr = new int[3][1];
System.out.println(arr); //[[I@4554617c 二维数组地址
//赋值
arr[0][0] = 1;
arr[1][0] = 3;
arr[2][0] = 2;
System.out.println(arr[2][0]); //输出:2
System.out.println(arr[2]); //[I@74a14482 一维数组地址
arr[2][1] = 5; //ArrayIndexOutOfBoundsException指针越界异常,因为数组声明时定义了元素数组长度为1,上面arr[2]已经赋值0下标
地址解析:[[I@4554617c([[表示二维数组,I表示int类型,@后面是地址值)
注意:当引用的数组下标大于等于定义的数组长度,会出现ArrayIndexOutOfBoundsException指针越界异常。
图示:

//动态初始化方式二
int[][] temp = new int[3][];
System.out.println(temp); //[[I@4554617c 二维数组地址
System.out.println(temp[0]); //null
System.out.println(temp[0][0]); //NullPointerException空指针异常,因为元素temp[0]为null,而temp[0][0]是获取temp[0]数组下标为0的值
//元素初始化
temp[0] = new int[1]; //数组长度为1
temp[1] = new int[]{12, 4, 3}; //数组长度为3
//元素数组赋值
temp[0][0] = 10;
System.out.println(temp[0]); //[I@74a14482 一维数组地址
System.out.println(temp[0][0]); //输出:10
System.out.println(temp[1][0]); //输出:12
注意:当引用的数组元素是一个非基本数据类型且为null时,使用该元素引用会出现NullPointerException空指针异常。
图示:

动态初始化方式一和方式二的区别:
- 方式一在使用的时候不需要初始化元素,方式二需要初始化元素后再使用,否则会出现NullPointerException异常。
- 方式一元素数组的长度在声明初始化的时候就固定了,方式二元素数组在声明初始化的时候不固定。
若要获取数组元素的值,需要遍历该数组,通过数组下标获取。
int[][] arr = {{1, 2},{5, 9},{10, 11, 13}};
for (int i = 0; i < arr.length; i++) {int[] val = arr[i];for (int j = 0; j < val.length; j++) {System.out.println(val[j]);}
}
内存图解

数组练习
数组练习案例:杨辉三角、冒泡排序、二分查找等。
相关文章:
Java基础——数组(一维数组与二维数组)
文章目录 一维数组声明初始化与赋值内存图解 二维数组声明初始化与赋值内存图解 数组练习 数组是多个相同类型的数据按一定顺序排列的集合。 说明: 数组是引用数据类型,数组的元素是同一类型的任何数据类型,包括基本数据类型和引用数据类型…...
Python爬虫抓取微博数据及热度预测
首先我们需要安装 requests 和 BeautifulSoup 库,可以使用以下命令进行安装: pip install requests pip install beautifulsoup4然后,我们需要导入 requests 和 BeautifulSoup 库: import requests from bs4 import BeautifulSou…...
Qt QTableWidget表格的宽度
默认值 QTableWIdget的表格宽度默认是一个给定值,可以手动调整每列的宽度,也不填满父窗口 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {this->resize(800,600);QStringList contents{"11","111111111111",&…...
OpenCV(opencv_apps)在ROS中的视频图像的应用(重点讲解哈里斯角点的检测)
1、引言 通过opencv_apps,你可以在ROS中以最简单的方式运行OpenCV提供的许多功能,也就是说,运行一个与功能相对应的launch启动文件,就可以跳过为OpenCV的许多功能编写OpenCV应用程序代码,非常的方便。 对于想熟悉每个…...
常见排序算法之插入排序类
插入排序,是一种简单直观的排序算法,工作原理是将一个记录插入到已经排好序的有序表中,从而形成一个新的、记录数增1的有序表。在实现过程中,它使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循…...
Dubbo服务消费端远程调用过程剖析
1 Dubbo服务消费端远程调用过程概述 (1)当消费方调用远程服务的方法时,会被InvokerInvocationHandler拦截,执行其invoke()方法,创建RpcInvocation对象; (2)接着会选择远程调用的负…...
华硕荣获“EPEAT Climate+ Champion”永续先驱称号
华硕持续深耕永续理念,努力提供低碳排放、高效能产品,并被全球电子委员会授予“EPEAT Climate Champion”称号。这一荣誉再次表明了华硕在永续管理方面的承诺,并凸显了华硕在追求永续发展上的决心。 华硕通过设立“科学基础减碳目标”、“再生…...
基于QT使用OpenGL,加载obj模型,进行鼠标交互
目录 功能分析(需求分析)技术点分析OpenGL立即渲染模式可编程渲染管线模式 QOpenGLWidget派生类 glwidget逻辑glwidget.hglwidget.cpp 鼠标交互功能obj格式介绍 效果bunnyCayman_GT 功能分析(需求分析) 基于QT平台,使…...
三大赛题指南发布!2023 冬季波卡黑客松本周末开启 Workshop
2023 年一众黑客松赛事中,为什么我们建议您选择波卡黑客松大赛?或许答案在于——作为开发者极度友好的技术生态,波卡能够从参赛者的立场出发,为大家提供从 0 到 1 实现项目孵化成长的机会。这里聚集了一线技术专家的资源力量&…...
数据结构与算法(Java版) | 算法的空间复杂度简介
关于算法的空间复杂度,下面我给大家作一个简单介绍。 类似于时间复杂度的讨论,一个算法的空间复杂度(Space Complexity)定义为该算法所耗费的存储空间,同样,它也是问题规模n的一个函数。 其实,…...
大数据-之LibrA数据库系统告警处理(ALM-12037 NTP服务器异常)
告警解释 当NTP服务器异常时产生该告警。 当NTP服务器异常消除时,该告警恢复。 告警属性 告警ID 告警级别 可自动清除 12037 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称。 RoleName 产生告警的角色名称。 HostName 异常N…...
烟草5G智慧工厂数字孪生可视化平台,赋能烟草工业数字化智慧转型
随着卷烟工厂提质增效需求增强,信息化建设推进及生产制造系统智能化改革发展,各生产单元逐步升级完善数字化,最终实现智能制造成为必然趋势。因此,5G卷烟加工工厂的数字化转型迫在眉睫。中国烟草制造行业正迈向全新的市场经济时代…...
PHP编写采集药品官方数据的程序
在 PHP 中编写爬虫程序,首先我们需要引入一些必要的库,如 curl 和 file_get_contents。然后,我们需要设置爬虫ip信息,以便我们可以从指定的爬虫ip服务器上获取数据。 // 引入必要的库 require_once curl.php;// 设置爬虫ip信息 $p…...
解决Jenkins执行git脚本时报错:No such device or address问题
问题现象: Jenkins执行BeanShell脚本时,报错:jenkins fatal: could not read Username for http://112.11.120.1: No such device or address 解决方案: 解决服务器拉取git仓库的代码权限,使用高级子模块克隆功能。…...
LCD英文字模库(16x8)模拟测试程序
字模 字模,就是把文字符号转换为LCD能识别的像素点阵信息。 电子发烧友可能都熟悉字模的用途。就是调用者通过向LCD模块发送字模数据,LCD根据字模数据在LCD面板上相应的像素描绘出图形或文字。 现在,大部分的LCD都内置了字模库,…...
二分法
文章目录 二分法概述二分 > value最左的位置二分 < value最右的位置局部最小值问题 二分法概述 什么是二分法呢?相信大家都有所了解,举个最经典的二分的例子。 给定一个整型有序数组,和一个值 v a l u e value value,如…...
Linux文件类型与权限及其修改
后面我们写代码时,写完可能会出现没有执行权限什么的,所以我们要知道文件都有哪些权限和类型。 首先 就像我们之前目录结构图里面有个/dev,它就是存放设备文件的,也就是说,哪怕是一个硬件设备,例如打印机啥的…...
RPC 框架 openfeign 介绍和学习使用总结
一、基本概念 RPC 远程过程调用(Remote Procedure Call)的缩写形式 Birrell 和 Nelson 在 1984 发表于 ACM Transactions on Computer Systems 的论文《Implementing remote procedure calls》对 RPC 做了经典的诠释。 RPC 是指计算机 A 上的进程&am…...
大厂真题:【DP/贪心】字节跳动2023秋招-小红的 01 串
题目描述与示例 题目描述 小红拿到了一个 01 串,她准备将若干个字符1 染成红色,将若干个字符0 染成蓝色,但有个限制:如果一个0 和一个1 相邻,那么它们不能同时染色。 小红想知道,最多可以染多少个字符&a…...
【技术类-01】doc转PDF程序卡死的解决方案,
摘要: 1、报错: raise AttributeError("%s.%s" % (self._username_, attr))) 2、表现:doc转PDF卡死(白条不动或出现以上英文) 3、解决:在docx保存代码行后面加上time.sleep(3) 4、…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
