当前位置: 首页 > news >正文

2026/3/24 数组

目录

1.什么是数组?

1.1数组的核心特性

2.静态初始化与动态初始化

2.1静态初始化

2.2动态初始化

2.3两种初始化的区别

3.数组的元素访问与遍历操作

3.1元素访问

3.2遍历操作

4.数组内存图

4.1Java 内存分配

4.2一个数组的内存图

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

5.方法参数传递内存图

5.1基本数据类型参数传递

5.2引用数据类型参数传递

结论(重点)

6.数组常见的两个问题

6.1数组索引越界异常

6.2空指针异常

7.二维数组

二维数组的 3 种定义格式

二维数组遍历(2 种最常用方法)

1.什么是数组?

数组是 Java 中最基础的引用数据类型,本质是相同数据类型元素的有序集合,可以理解为一个 “容器”,用来批量存储同一类型的数据(比如整数、字符串、对象等)。数组的长度在创建时就固定,无法动态扩容。

1.1数组的核心特性

  • 长度固定:创建数组时必须指定长度,一旦创建,长度不能改变。
  • 类型统一:数组中所有元素的类型必须一致(比如不能同时存intString)。
  • 索引访问:元素通过索引(下标)访问,索引从0开始,最后一个元素的索引是长度-1
  • 内存连续:数组在内存中是连续存储的,访问速度快。

2.静态初始化与动态初始化

2.1静态初始化

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

2.2动态初始化

2.3两种初始化的区别

静态初始化:手动指定元素,系统计算出数组长

动态初始化:手动指定长度,系统分配默认值

使用场景:

  1. 动态初始化:不明确要操作的数据

    举例: 产生10个1~100之间的随机数, 找出最大值

  2. 静态初始化:要操作的数据, 需求中已经明确告知了

    举例: 已知班级学生成绩为 90 100 100 20 10, 请找出最大值

3.数组的元素访问与遍历操作

3.1元素访问

格式:数组名[索引];

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

3.2遍历操作

数组遍历:依次访问数组中的每一个元素

熟练了之后,今后可以使用快捷键来遍历数组

数组名.fori + 回车

4.数组内存图

4.1Java 内存分配

:方法运行的时候进入的内存

:new 出来的东西进入堆内存,开辟空间并产生内存地址

方法区:字节码文件加载时进入的内存

本地方法栈:运行本地特殊方法 (底层是C++代码编写的方法)

寄存器:交给 CPU 调用的

重点关注(栈、堆、方法区)

方法在没有被调用时,都存在方法区

当被调用的时候,采用压栈、出栈的方式,运行完就释放了栈内存空间

4.2一个数组的内存图

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

5.方法参数传递内存图

Java 只有一种参数传递方式:值传递!只是「基本类型」和「引用类型」传的值不一样,效果完全不同

5.1基本数据类型参数传递

是什么

基本类型int、double、float、char、boolean、byte、short、long传的是:变量里的真实数值(拷贝一份)

5.2引用数据类型参数传递

是什么?

引用类型:数组、对象、String(特殊)、集合传的是:对象的地址值(房子门牌号

结论(重点)

引用类型传参:方法里修改「内容」,外面会跟着变!

总结:

  • 基本类型:传的是数值拷贝→ 改拷贝,原值不变
  • 引用类型:传的是地址值→ 改地址指向的内容,内容会变

6.数组常见的两个问题

6.1数组索引越界异常

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

6.2空指针异常

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

  • 索引越界:数组存在,但你访问的位置不对
  • 空指针:数组根本不存在(是 null),你却想用它

新手怎么避免?

  1. 数组下标永远从0 开始
  2. 循环条件写i < arr.length
  3. 使用数组前,确保它不是 null
  4. 不要访问arr[arr.length](这就是越界

7.二维数组

二维数组的 3 种定义格式

二维数组遍历(2 种最常用方法)

遍历 = 一行一行、一列一列把数据取出来。

方法 1:普通 for 循环(最通用,能拿到下标)

总结

  • 二维数组 = 数组里装数组,可以看作表格(行 + 列)
  • 定义:静态{{}}、动态new int[行][列]
  • 遍历
    • 普通 for:i控制行,j控制列
    • 增强 for:先取行,再取行内元素
http://www.jsqmd.com/news/531508/

相关文章:

  • 基于comsol的三维水平集激光烧蚀熔池流动数值模拟,考虑反冲压力,马兰戈尼对流,表面张力,重...
  • 2026年热门的数控高速冲床/肘节式高速冲床销售厂家推荐 - 品牌宣传支持者
  • AI编程使用问题汇总~持续更新中
  • 揭开LoRA微调的神秘面纱:推理时,LoRA究竟是怎么起作用的?
  • java毕业设计基于ssm高校奖助学金系统
  • 《堆的 shift up》
  • 实战派指南:用MONAI Transform流水线,5步搞定3D CT脾脏分割数据预处理
  • 国内使用huggingface下载大模型教程
  • [特殊字符] Nano-Banana效果展示:支持多部件层级嵌套的复杂产品爆炸图
  • 22026.3.22/23/24 CAD学习十二--图层功能入门和技巧讲解
  • 手机相机对焦玄学揭秘:PDAF相位对焦在vivo/一加中的实际表现对比
  • 免费开源硬件监控神器:LibreHardwareMonitor完全使用指南
  • Notepad--:跨平台文本编辑器的终极指南,为中文用户量身打造
  • 供电局无人机巡检合作优质机构推荐:无人机行业、无人机资源加盟、无人机资质合作、无人机院校低空专业共建、无人机驾驶培训选择指南 - 优质品牌商家
  • Chroma2-Kaleidoscope:免费AI绘图新模型值得期待吗?
  • 按键精灵新手必看:5分钟搞定LOL自动回复脚本(附祖安话生成代码)
  • 为什么MRAM还没取代你的电脑内存?深入解析DRAM、SRAM与MRAM的实战对比
  • 拓竹工单打标:RAG方案零返工秘籍
  • Python实战:三种迭代法解线性方程组对比(附完整代码与性能测试)
  • AI模型协同新范式:开源工具如何重塑智能任务处理流程
  • 2025技术面试终极指南:从算法刷题到系统设计的完整通关路线
  • 告别TeamViewer!用OpenWRT的SFTP+内网穿透实现跨平台文件互传(Windows/Mac/Linux全兼容)
  • 亲测IndexTTS-2-LLM:CPU也能跑的智能语音合成,效果太自然了!
  • 深度解析:全面探索平面手性COMSOL光学仿真技术,BIC驱动下的最大平面手性特征,涵盖能带、...
  • java毕业设计基于SSM的驾校培训预约管理系统
  • ONNX模型高效管理指南:从环境适配到协作优化的全流程方案
  • Vue项目实战:海康视频监控插件集成全攻略(含常见报错解决方案)
  • 从原理到实践:用yocs_velocity_smoother实现差速机器人速度滤波(附ROS Noetic适配方案)
  • ionic 单选框操作详解
  • 【ComfyUI】Qwen-Image-Edit-F2P生成表情包:从静态人像到动态夸张表情的演变