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

Java基础语法之数组

数组

一、认识数组

1.什么是数组

  • 数组就是一个容器,用来存一批同种类型的数据。

举例

20, 10, 80, 60, 90
int[] arr = {20, 10, 80, 60, 90};张三, 李四, 王五
String[] names = {"张三", "李四", "王五"};

2.为什么要使用数组

假设用变量解决随机点名的需求

  • 代码繁琐:大量变量的定义。
  • 实现需求繁琐。
String name1 = "张誉";
String name2 = "刘疏桐";
String name3 = "田启峰";
...
...
String name68= "张学颖";
String name69= "李沁霖";
String name70= "陈侃";Random r = new Random();
int number = r.nextInt(70) + 1; // 1 - 70
switch (number){
case 1:
System.out.println(name1 + "出来回答问题!");
break;
case 1:
System.out.println(name2 + "出来回答问题!");
break;
...
}

用数组解决随机点名的需求

  • 代码简洁。
  • 逻辑清晰。
String[] names = {“张誉”, “刘疏桐”, “田启峰”,… “张学颖”, “李沁霖”, “陈侃”,};
Random r = new Random();
int i = r.nextInt(70); // 0- 69
System.out.println(names[i] + “出来回答问题!”)

结论

  • 结论:遇到批量数据的存储和操作时,数组比变量更适合。

二、数组的定义和访问

1.静态初始化数组

1.1 定义
  • 义数组的时候直接给数组赋值。
1.2 静态初始化数组的格式
  • 数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… };
// 完整格式
int[] ages = new int[]{12, 24, 36}
double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};
  • 数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };
// 简化格式
int[] aes = {12, 24, 36};

注意

  • “数据类型[] 数组名”也可写成 “数据类型 数组名[] ”。
  • 什么类型的数组只能存放什么类型的数据。
  • 数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型
1.3 数组的访问
1.3.1 数组的访问
  • 数组名[索引]
// 取值
System.out.println(arr[0]); // 12
// 赋值
arr[2] = 100;
System.out.println(arr[2]); // 100
1.3.2 数组的长度属性:length
// 获取数组的长度(就是数组元素的个数)
System.out.println(arr.length); // 3
1.3.3 数组的最大索引
数组名. length – 1 // 前提:元素个数大于0

注意:

  • 访问数组时,若使用的索引超过了数组最大索引,执行程序时会出bug,出现一个索引越界的异常提示
1.4 数字的遍历
1.4.1 遍历定义
  • 就是一个一个数据的访问。
1.4.2 为什么要遍历数组
  • 求和
  • 元素搜索
  • 找最大值
  • 找最小值

2.动态初始化数组

2.1 定义
  • 定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数组的长度
2.2 数组的动态初始化格式
数据类型[]  数组名 = new 数据类型[长度];
int[] arr = new int[3];// 后赋值
arr[0] = 10;
System.out.println(arr[0]); // 10

注意

静态初始化和动态初始化数组的写法是独立的,不可以混用。

2.3 动态初始化数组元素默认值规则
数据类型默认值
byte、short、char、int、long0
float、double0.0
booleanfalse
类、接口、数组、Stringnull

3.数组在计算机中的执行原理

3.1 数组的执行原理,Java程序的执行原理
3.1.1 ava 内存分配介绍
  • 方法区
  • 本地方法栈
  • 寄存器

在这里插入图片描述

简单说说 int a = 20; int[] arr = new int[3]这两行代码的执行原理?

  • a是变量,直接放在栈中,a变量中存储的数据就是20这个值。
  • new int[3]是创建一个数组对象,会在堆内存中开辟区域存储3个整数。
  • arr是变量,在栈中,arr中存储的是数组对象在堆内存中的地址值。
3.2 多个变量指向同一个数组的问题

在这里插入图片描述

  • 如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象

总结

  • 多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?

    • 多个数组变量中存储的是同一个数组对象的地址。
    • 多个变量修改的都是同一个数组对象中的数据。
  • 如果某个数组变量中存储的null,代表什么意思?需要注意什么?

  • 代表这个数组变量没有指向数组对象。
    p-1747228570011)]

  • 如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象

总结

  • 多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?

    • 多个数组变量中存储的是同一个数组对象的地址。
    • 多个变量修改的都是同一个数组对象中的数据。
  • 如果某个数组变量中存储的null,代表什么意思?需要注意什么?

  • 代表这个数组变量没有指向数组对象。

  • 可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数组长度,会报空指针异常:NullPointerException。

http://www.xdnf.cn/news/6297.html

相关文章:

  • Windows下Docker安装portainer
  • 64. 最小路径和
  • Shell 脚本中的通道号(文件描述符)
  • maven项目, idea右上角一直显示gradle的同步标识, 如何去掉
  • 计算机网络:什么是计算机网络?它的定义和组成是什么?
  • 开源Heygem本地跑AI数字人视频教程
  • python使用matplotlib画图
  • IDEA编辑器设置的导出导入
  • why FPGA喜欢FMC子卡?
  • Vue3学习(组合式API——计算属性computed详解)
  • 使用Word2Vec算法实现古诗自动生成实战
  • Linux514 rsync 解决方案环境配置
  • 2025年渗透测试面试题总结-360[实习]安全工程师(题目+回答)
  • 三维CAD皇冠CAD(CrownCAD)建模教程:工程图模块二
  • 52页PPT | 企业数字化转型L1-L5数据架构设计方法论及案例数字化转型解决方案数字化规划方案
  • 回溯实战篇2
  • 今日行情明日机会——20250514
  • day25-异常处理
  • [Java实战]Spring Security 添加验证码(二十三)
  • android实现USB通讯
  • 基于 Kubernetes 部署容器平台kubesphere
  • CCF第七届AIOps国际挑战赛季军分享(RAG)
  • YOLO v2:目标检测领域的全面性进化
  • 记录 QT 在liunx 下 QFileDialog 类调用问题 ()Linux下QFileDialog没反应)
  • AI日报 · 2025年5月14日|Android 生态大型更新与多端 Gemini 集成
  • UPS是什么?UPS 不间断电源有哪些适配的升压芯片?
  • zabbix7.2最新版本 nginx自定义监控(三) 设置触发器
  • MySQL之基础索引
  • postman 用法 LTS
  • 互联网大厂Java求职面试:AI内容生成平台下的高并发架构设计与性能优化