Java数组深度解析:概念、初始化与内存分配
71 浏览量
更新于2024-08-03
收藏 1.2MB PDF 举报
"Java学习笔记,涵盖Java概述、环境搭建、语言基础、选择结构和数组"
在Java学习的第六部分,我们重点探讨了数组这一重要概念。数组是编程中常用的数据结构,它允许我们存储一组相同类型或兼容类型的数据。在Java中,数组具有以下特点:
1. **数据类型相同或兼容**:数组内的所有元素必须是同一类型或兼容的类型,例如,你可以创建一个只包含整数的数组或一个只包含字符串的数组。
2. **长度固定**:数组的长度在声明时必须确定,并且在数组的生命周期内无法改变。这意味着一旦创建,数组的大小是固定的。
声明数组有两种方式:
**方式一**:`数组元素类型[] 数组名`
这是推荐的方式,例如 `int[] numbers`。
**方式二**:`数组元素类型 数组名[]`
例如 `int numbers[]`,虽然可行,但不常见。
数组的初始化至关重要,Java中的数组必须先初始化才能使用。初始化分为两种方式:
**静态初始化**:
在声明时指定每个元素的初始值。系统会根据提供的值自动计算数组长度。例如:
```java
int[] arr1 = new int[]{10, 8, 28, 15, 12};
int[] arr2 = {10, 8, 28, 15, 12}; // 简写形式
String[] names1 = new String[]{"张三", "李四", "王五"};
String[] names2 = {"张三", "李四", "王五"}; // 简写形式
```
简写形式必须在同一语句中完成,不能分开写。
**动态初始化**:
仅指定数组长度,元素会自动分配默认值。例如:
```java
int[] nums = new int[5]; // 整数默认为0
String[] cities = new String[3]; // 引用类型默认为null
char[] chars = new char[10]; // 字符默认为'\u0000'
```
在初始化时,静态初始化和动态初始化不能混用,即不能同时指定长度和初始化元素。
数组的使用涉及其下标,下标通常从0开始,到数组长度减1,例如一个长度为5的数组,下标范围是0到4。遍历数组通常通过循环实现,如for-each循环或传统的for循环。
数组在程序内存中分为两部分存储:
**栈**:
这是一个有限的空间,用于存储局部变量(基本类型和引用类型的地址)。栈的存储速度快,但空间相对较小。
**堆**:
堆空间较大,但存取速度较慢。引用类型的实际数据(如对象和数组)存储在这里。数组虽然在声明时在栈上创建引用,但其实际内容是在堆中。
当需要扩大数组容量时,Java不会自动扩容数组。如果需要更大的空间,需要创建新的数组并将旧数组的内容复制到新数组中。在函数中传递数组时,实际上是传递数组的引用,而不是数组本身,这意味着对数组的修改会影响到原始数组。
数组类是Java中的一个重要概念,如`ArrayList`和`ArrayDeque`等,它们提供了动态调整大小的功能,弥补了固定大小数组的不足。在实际开发中,这些集合类经常被用来替代基本的数组,提供更灵活的数据管理能力。
2023-12-13 上传
2017-10-20 上传
2011-06-24 上传
2023-11-25 上传
2017-10-15 上传
2021-12-26 上传
2018-02-28 上传
2008-04-16 上传
2024-12-25 上传
熙皮
- 粉丝: 148
- 资源: 10
最新资源
- 温特线性matlab代码-matlab_NS_solvers:旧的研究代码。主要是涡量公式中的2DNS求解器
- 行业文档-设计装置-一种切纸机的双位刀头.zip
- Lora-32-Connect-by-Wifi
- 视图:场景模块的界面,为发送到渲染器的显示对象提供用户交互输入输出和剔除管理
- omniauth-rails_csrf_protection:在Rails应用程序的OmniAuth请求端点上提供CSRF保护
- ryanatkn
- 基于神经网络的人脸识别.zip
- derrobott.github.io:没事了
- matlab导弹落点代码-missile_simulation_matlab:导弹仿真Matlab代码
- iains:TestAccount
- xlog:xlog是netcontext感知HTTP应用程序的记录器
- 自动驾驶汽车案例研究
- 「基于图像识别的收银台」客户端软件,基于OpenCV + Qt,需要搭配「基于图像识别的收银台」后端服务使用。.zip
- darwish-rainmeter
- CSCI3800_Sp15_Team8:CSCI3800 Spring 2015 Team 8项目
- blog