【疯狂Java】数组

news2024/11/15 19:53:21

 1、一维数组

(1)初始化

①静态初始化:只指定元素,不指定长度

new 类型[] {元素1,元素2,...}

int[] intArr;
intArr = new int[] {5,6,7,8};
②动态初始化:只指定长度,不指定元素

new 类型[数组长度] 

int[] princes = new int[5];

【注意】

- 如果数组元素的类型是基本类型中的整数类型(byte、short、int和long),则数组元素的值为0

- 如果数组元素的类型是基本类型中的浮点类型(float、double),则数组元素的值为0.0

- 如果数组元素的类型是基本类型中的字符类型(char),则数组元素的值为'\u0000'

- 如果数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值为false

- 如果数组元素的类型是引用类型(类、接口和数组),则数组元素的值为null

(2)使用数组

①length

该属性返回数组的长度

②访问数组元素

索引从0开始,最后一个元素的索引是length-1

使用的元素超出数组长度,就会导致ArrayIndexOutOfBoundsException(数组索引越界异常)

③遍历数组

④foreach循环遍历数组

数组有几个元素,该循环就执行几次,变量会自动、依次等于每个元素

foreach循环只能访问数组元素的值,不能修改数组元素的值。

for(元素类型 变量名 : 数组名)
{
    //可通过变量名访问每个元素
}
int[] iArr = new int[] {20,30,40,50};
for (int it : iArr) {
    System.out.println(it);
}

建议:永远不要在foreach循环中修改循环计算器的值

(3)深入理解数组

【Java程序,必须要使用虚拟机Virtual Machine(有些地方也称之为JVM)才能运行】

Java程序的内存可分为:

①堆(heap)内存:Java虚拟机启动时分配的一块永久的、很大的内存区。堆内存只有一块。

堆内存中对象,如果没有引用变量指向它,那么它就会变成垃圾,等待VM的垃圾回收器来回收。

public class 内存中的数组 {
	public static void main(String[] args) {
		//分配800个字节
		long[] arr = new long[100];
		arr[99] = 33;
		System.out.println(arr[99]);
	}
}

由于long数组需要分配800个字节,而虚拟机只有258个字节,所以报错“初始堆内存给的太少了”

②栈(stack)内存:每次方法运行分配一块临时、很小的内存区。每个方法都有自己对应的栈区,方法结束时,对应的栈区就会被回收。

- 在方法中定义的、局部变量(不管是什么类型),都放入对应的方法栈区。

- new出来的对象,都放在堆内存。

引用类型的变量是变量,对象是对象,两者是不同的东西。

例如:

int[] iArr = new int[4];

iArr存在栈内存中,new出来的int[4]存在堆内存中。

【变量赋值的区别】

- 基本类型的赋值:直接将该值存入变量所在内存。

- 引用类型的赋值:将该对象所在第一个内存单元的编号(内存地址)存入变量。

下面使用代码+图来演示:

public class 内存中的数组 {
	public static void main(String[] args) {
		//基本类型的赋值
		int it = 20; //4个字节
		
		//iArr在栈内存,new出来的数组对象在堆内存
		int[] iArr = new int[4]; //数组占16个字节
	}
}

public class 内存中的数组 {
	public static void main(String[] args) {
		//基本类型的赋值
		int it = 20; //4个字节
		
		//iArr在栈内存,new出来的数组对象在堆内存
		int[] iArr = new int[4]; //数组占16个字节
		System.out.println(iArr.length);
		
		//再次对引用变量赋值,让iArr重新指向一个新的数组
		iArr = new int[] {20,10};
		System.out.println(iArr.length);
	}
}

 

【验证自己是否真的理解基本类型和引用类型】

阅读一下代码,说出每个输出语句的输出结果。

public class 基本类型和引用类型 {
	public static void main(String[] args) {
		int a = 20;
		int b = a;
		System.out.println("a:" + a);
		System.out.println("b:" + b);
		b = 13;
		System.out.println("a:" + a);
		System.out.println("b:" + b);
		
		int[] arr = new int[] {20};
		int[] brr = arr;
		System.out.println("arr[0]:" + arr[0]);
		System.out.println("brr[0]:" + brr[0]);
		brr[0] = 13;
		System.out.println("arr[0]:" + arr[0]);
		System.out.println("brr[0]:" + brr[0]);
	}
}

答案与解析:

package day04;

public class 基本类型和引用类型 {
	public static void main(String[] args) {
		int a = 20;
		int b = a;//基本类型赋值:直接将值存入变量所在的内存
		System.out.println("a:" + a);//20
		System.out.println("b:" + b);//20
		b = 13;//将13存入b所在的内存
		System.out.println("a:" + a);//20
		System.out.println("b:" + b);//13
		
		int[] arr = new int[] {20};//引用类型赋值:将该对象所在首地址存入变量
		int[] brr = arr;//引用类型赋值:将该对象所在首地址存入变量
		System.out.println("arr[0]:" + arr[0]);//20
		System.out.println("brr[0]:" + brr[0]);//20
		brr[0] = 13;
		System.out.println("arr[0]:" + arr[0]);//13
		System.out.println("brr[0]:" + brr[0]);//13
	}
}

 2、没有多维数组

其实只有一维数组,二维数组是假象。

二维数组的本质:数组元素为一维数组的数组。

(1)初始化

①静态初始化

new 类型[]...[] {元素1,元素2,...}

int[][] arr = new int[][]{{1,2,3},{4,5,6,7},{8,9,10,11}};

②动态初始化

new 类型[数组长度]...[数组长度]

int[][] arr = new int[5][];

 ③静态和动态混着用

public class 二维数组静态初始化 {
	public static void main(String[] args) {
		//静态
		int[][]	arr = new int[][] {
			new int[2],//元素用动态创建
			new int[3],
			new int[4] 
		};
		System.out.println(arr.length);
		
		//静态
		int[][]	brr = new int[][] {
			new int[] {1,2},//元素用静态创建
			new int[] {3,4,5},
			new int[] {6,7,8,9} 
		};
		System.out.println(brr.length);
		
		//静态
		int[][] crr = new int[][] {
			new int[4],//元素用动态创建
			{1,2,3},//元素用静态的简化语法创建
			new int[3]//元素用动态创建
		};
		System.out.println(crr.length);
	}
}

 ④二维数组简化初始化

//创建一个长度为4的数组,其中每个元素都是动态初始化的长度为5的数组
int[][] arr = new int[4][5];
//相当于
int[][] brr = new int[][] {
    new int[5],
    new int[5],
    new int[5],
    new int[5],
    new int[5],
};

(2)对数组元素赋值

【常见错误】

int[][] arr = new int[5][];

//对数组元素赋值
//arr[0]是数组元素,是int[]类型,20是int
arr[0] = 20;

(3)使用数组

遍历

int[][]	arr = new int[][] {
    new int[2],//元素用动态创建
    new int[3],
    new int[4] 
};

for (int i = 0; i < arr.length; i++) {
    //arr[i]是int[]类型
    int[] brr = arr[i];
    for (int j = 0; j < brr.length; j++) {
        System.out.print(brr[j] + "\t");
    }
    System.out.println();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【德哥说库系列】-PostgreSQL跨版本升级

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

【算法训练-动态规划 五】【二维DP问题】最大正方形

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【动态规划】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

Kafka - 深入了解Kafka基础架构:Kafka的基本概念

文章目录 Kafka的基本概念 Kafka的基本概念 我们首先了解一些Kafka的基本概念。 1&#xff09;Producer &#xff1a;消息生产者&#xff0c;就是向kafka broker发消息的客户端2&#xff09;Consumer &#xff1a;消息消费者&#xff0c;向kafka broker获取消息的客户端3&…

如何避免Web3诈骗,重点关注这5个安全标识提醒

从预付费电子邮件到网络钓鱼攻击&#xff0c;互联网充斥着各种骗局。尽管区块链内置了加密功能&#xff0c;但它们也遭受了相当多的恶意攻击并被获取了对帐户的访问权限。幸运的是&#xff0c;大多数诈骗攻击都有特定的安全标识提醒&#xff0c;精明的用户可以留意&#xff0c;…

淘宝商品详情API接口,解决滑块问题

淘宝商品详情API接口是一种用于获取淘宝商品详细信息的接口&#xff0c;它可以帮助开发者在自己的网站或应用程序中快速获取淘宝商品的详细信息&#xff0c;包括价格、图片、商品描述等。 该接口的主要作用包括&#xff1a; 商品信息展示&#xff1a;通过淘宝商品详情API接口…

网络协议--IGMP:Internet组管理协议

13.1 引言 12.4节概述了IP多播给出&#xff0c;并介绍了D类IP地址到以太网地址的映射方式。也简要说明了在单个物理网络中的多播过程&#xff0c;但当涉及多个网络并且多播数据必须通过路由器转发时&#xff0c;情况会复杂得多。 本章将介绍用于支持主机和路由器进行多播的In…

wkhtmltoimage/wkhtmltopdf 使用实践

1. 介绍 wkhtmltopdf/wkhtmltoimage 用于将简单的html页面转换为pdf或图片&#xff1b; 2.安装 downloads 2.1. mac os 下载64-bit 版本然后按照指示安装, 遇到 untrust developers 时&#xff0c;需要在 Settings -> Privacy 处信任下该安装包。 2.2. debian # 可用…

[AutoSar NVM] 存储架构

依AutoSAR及公开知识辛苦整理&#xff0c;禁止转载。 专栏 《深入浅出AutoSAR》&#xff0c; 全文 2900 字. 图片来源&#xff1a; 知乎 汽车的ECU内存中有很多不同类型的变量&#xff0c;这些变量包括了车辆各个系统和功能所需的数据。大部分变量在ECU掉电后就会丢失&#x…

AnkiPDF Guru软件评测:打开全新学习方式的大门

在当今信息爆炸的时代&#xff0c;如何高效学习和记忆成为了每个人关注的焦点。AnkiPDF Guru软件作为结合了Anki和PDF的学习利器&#xff0c;向我们展示了一种全新的学习方式。本文将以软件的实用性和使用场景为切入点&#xff0c;从专业的角度客观分析和评测该软件&#xff0c…

3.2.6:工作表的VBA操作引申

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…

【毕业设计】基于SSM酒店后台管理系统

前言 &#x1f525;本系统可以选作为毕业设计&#xff0c;运用了现在主流的SSM框架&#xff0c;采用Maven来帮助我们管理依赖&#xff0c;所选结构非常合适大学生所学的技术&#xff0c;本系统结构简单&#xff0c;容易理解&#xff01;本系统功能结构完整&#xff0c;非常高适…

express session JWT JSON Web Token

了解 Session 认证的局限性 Session 认证机制需要配合 cookie 才能实现。由于 Cookie 默认不支持跨域访问&#xff0c;所以&#xff0c;当涉及到前端跨域请求后端接口的时候&#xff0c;需要做很多额外的配置&#xff0c;才能实现跨域 Session 认证。 注意&#xff1a; 当前端…

rust学习—— 复合类型结构体、复合类型枚举、复合类型元组

文章目录 复合类型元组用模式匹配解构元组用点来访问元组元组的使用示例 复合类型结构体结构体定义结构体语法创建结构体实例访问结构体字段简化结构体创建结构体更新语法 结构体的内存排列元组结构体(Tuple Struct)单元结构体(Unit-like Struct)结构体数据的所有权打印结构体 …

k8s kubeadm配置

master 192.168.41.30 docker、kubeadm、kubelet、kubectl、flannel node01 192.168.41.31 docker、kubeadm、kubelet、kubectl、flannel node02 192.168.41.32 do…

springboot配置redis

1.Jedis库 依赖库 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.0.2</version> </dependency>使用案例&#xff1a; Testpublic void jedis(){Jedis jedis new Jedis("127…

【Java 进阶篇】Java Servlet URL Patterns 详解

Java Servlet 是构建动态 Web 应用程序的关键组件之一&#xff0c;而 URL Patterns&#xff08;URL 模式&#xff09;则是定义 Servlet 如何响应不同 URL 请求的重要部分。在本文中&#xff0c;我们将深入探讨 Java Servlet URL Patterns 的各个方面&#xff0c;适用于初学者&a…

谢谢大家!

注&#xff1a;此篇都是真心话&#xff01; 谢谢各位对我长久以来的支持&#xff0c;感谢感谢&#xff01; 感谢各位把我的阅读量提升到21487&#xff01; 感谢各位把我的排名提升到24916&#xff08;灰长前&#xff0c;干到前1000我发超长文章&#xff09;&#xff01; 感谢…

会声会影2023永久稳定绿色汉化中文版安装包下载

会声会影2023操作简单&#xff0c;功能同样强大&#xff01;会声会影附带上百种特效、滤镜、转场、模板。同时各类专业级视频工具&#xff0c;如调色、遮罩、绿幕抠像、运动追踪、分屏创建器&#xff0c;满足更高标准的视频需求。这款软件上手操作简单易学&#xff0c;就算你在…

已更新!宝藏教程!MYSQL-第六章节多表查询(一对一,多对多,一对多),连接查询(内,外连接),联合查询,子查询 代码例题详解这一篇就够了(附数据准备代码)

c知识点合集已经完成欢迎前往主页查看&#xff0c;点点赞点点关注不迷路哦 点我进入c第一章知识点合集 MYSQL第一章节DDL数据定义语言的操作----点我进入 MYSQL第二章节DDL-数据库操作语言 DQL-数据查询语言----点我进入 MYSQL第三章节DCL-管理用户&#xff0c;控制权限----点我…

windows安装数据库MySQL

windows安装数据库MySQL 文章目录 windows安装数据库MySQL一、MySQL官网下载压缩包二、在D盘新建文件夹D:\MySQL&#xff0c;将下载的压缩包解压到该文件夹下三、配置环境变量四、通过命令行模式安装、启用、配置SQL服务 一、MySQL官网下载压缩包 下载地址&#xff1a;https:/…