Java----数组的定义和使用

1.数组的定义

在Java中,数组是一种相同数据类型的集合。数组在内存中是一段连续的空间

2.数组的创建和初始化

2.1数组的创建

在Java中,数组创建的形式与C语言又所不同。

Java中数组创建的形式

T[] 数组名 = new T[N];

1.T表示数组存放的数据类型。

2.T[]表示数组的类型。

3.N表示数组的长度。 

2.2数组的初始化

数组的初始化分为动态初始化静态初始化两种。

2.2.1 动态初始化

动态初始化就是在创建数组的时候,直接指定数组元素的个数。

如以下代码

int[]arr=new int[10];//10就是数组元素个数

2.2.2 静态初始化 

静态初始化就是在创建数组的时候不指定数组中元素的个数,但指定数组的内容。

语法格式:

T[] 数组名称=new int[]{data1,data2,data3.....};

举例说明

public static void main(String[] args) {int[] arr=new int[]{1,2,3,4,5};String[] man=new String[]{"red","man","lebron"};double[] arr2=new double[]{1.2,1.2,2.5};}

注意事项:

1.在Java中,数组在创建的同时不能同时指定数组的长度和数组的内容。否则就会报错。

public class CSDN {public static void main(String[] args) {int[] arr=new int[5]{1,2,3,4,5};String[] man=new String[4]{"red","man","lebron"};double[] arr2=new double[5]{1.2,1.2,2.5};}
}

2cdafec003e9469d86a3da41e1f677e7.png

如上面同时所示,同时指定数组的长度和数组的内容就会报错。

2.虽然静态初始化没有指定数组的长度,编译器在编译时会根据 { } 里面的元素来确定数组的长度。

3.静态初始化时,{ } 里面的元素的数据类型必须和数组创建时声明的数据类型相同。

4.静态初始化可以简写,后面的new T[]可以省略掉。

public static void main(String[] args) {int[] arr={1,2,3,4,5};String[] man={"red","man","lebron"};double[] arr2={1.2,1.2,2.5};}

 2.2.3 总结共同点

动态初始化和静态初始化都可以分两步写。

        //动态初始化分两步int[] arr;arr=new int[10];
        //静态初始化分两步写int[] arr2;arr2=new int[]{1,2,3,4,5,6};

注意:分两步进行初始化时,new T[ ] 这部分不能省略。

2.2.4 补充

1.数组的创建其实可以像C语言那样创立,但是不推荐。

2.如果数组在创建时没有初始化数组的内容,数组中元素都有默认的其对应的零值。如下表

def4d192f7574cb880240f60f1a47dd5.png

2.3 数组的访问和遍历

2.3.1数组的访问

数组在内存中是一段连续的空间,空间的编号都是从0开始,一次递增。这些编号也就是数组的下标,我们可以通过数组的下标来访问数组中的元素。

比如:

int[]array = new int[]{10, 20, 30, 40, 50};
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);
System.out.println(array[4]);

如上面的代码所示,0,1,2,3,4就是数组的下标,我们就通过这些下标来访问数组中对应的元素。

2.3.2 数组的遍历

数组的遍历就是将数组的元素都浏览一遍。

在Java中,我们有两种遍历数组的方法。

重点:在Java中,我们可以通过 数组名.length 来获取数组的长度。

1.for循环遍历数组

public static void main(String[] args) {int[] arr=new int[]{1,2,3,4,5};for(int i=0;i<arr.length;i++){System.out.print(arr[i]+" ");}}

2.foreach循环 

 public static void main(String[] args) {int[] arr=new int[]{1,2,3,4,5};for(int x:arr){System.out.print(x+" ");}}

foreach循环的做法是遍历数组,一次将数组中的元素放入x中。

3.数组是引用数据类型

3.1JVM的内存分布

在介绍引用数据类型之前,我们先来简单介绍以下JVM的内存分布。

如下图

31b8c26a211442d181ba43d13d36d451.jpeg

这里我们就先简单了解一下虚拟机栈和本地方法栈。

本地方法栈:本质是由C/C++构造的一些方法,我们可以直接使用。

虚拟机栈:就是我们平常学习计算机语言说的栈。

3.2引用数据类型

在JAVA中,我们的数据类型分为基本数据类型和基本数据类型。

基本数据类型创建的变量被称为基本变量,其内存中存的是变量的值。

由引用数据类型创建的数据类型一般被称为对象的引用,其空间存储的是对象的地址。

什么是引用呢?

看一下代码

 public static void main(String[] args) {int[] arr=new int[]{1,2,3,4,5};System.out.println(arr);int a=10;}

我们在创建变量的时候,计算机系统都会在栈中为变量开辟内存。

如以上代码,我们创建了一个数组变量和一个int变量,那么栈就会为这两个变量分配内存。

由于int a是基本数据类型,所以创建变量是赋值的10就直接占据了为变量a开辟的内存中。

而数组是引用数据类型, 其内存可以简单理解为寸的是数组的首元素地址。

所以,引用数据类型中存的地址,我们就可以说通过array这个引用来访问数组中的元素。

60e597e813384f7eba83b39265e24e83.png

 我么再来看一段代码

 public static void main(String[] args) {int[] arr1=new int[]{1,2,3,4,5};arr1[0]=3;arr1[1]=4;int[] arr2=new int[]{10,20,30,40,50};arr2=arr1;arr1[0]=100;arr2[1]=200;for(int x:arr2){System.out.print(x+" ");}}

输出会是什么呢?

我们通过画图来分析代码

首先,我们创建了arr1数组。

3ea4eb8bbcc14c6f809bbe0f7b81442d.png

我们就可以通过arr1这个引用来访问数组中的元素。接着我们对arr1进行了数组元素中的改变。

6b76762d9d7446ff8e864074a3b68e2a.png

接着我们又创建了arr2。

8de745c320754f558c34ad92799d477c.png

我们就可以通过arr2这个引用来访问arr2中的数据。

接着就是一个重点了,我们写了一个 arr2=arr1 的代码是什么意思呢?

简单来说就是将arr1中存储的地址传给arr2,arr2中存的数据就变为了0x9了。

那样arr2就不指向arr2了,而是指向了arr1。

这时侯,我们我们同过arr1或arr2这两个引用访问的都是arr1了。

而原先arr2指向的对象由于没有了引用,其在堆占的内存就自动被计算机系统回收了。

efe6fe6ead04450285f17686d4111c81.png

所以最后两步都是对arr1数组数据的改变。

910c343ca01e40708239dd4d7defc7d1.png

运行代码

dcb58790b08642668e329b6ae1d73556.png

 4. 二维数组

4.1二维数组的创建和初始化

二维数组的创建和初始化我们直接以代码的形式介绍

public static void main(String[] args) {int[][] arr1=new int[][]{{1,2,3},{4,5,6}};int[][] arr2=new int[2][3];int[][] arr3={{1,2,3},{1,2,3}};}

主要有以上三种形式。

4.2 二维数组的遍历

 首先,我们要清楚二维数组是一个特殊的一维数组。

Java中这个定义很清楚。

我们以arr1为例。

如下图所示

bd95f92e14d44ffb8f1e9bc39ef619e6.png

arr1是一个2行3列的数组,这个二维数组可以看作是有两个一维数组组成的。

其中arr1[0] 是访问arr1这个二维数组中第一个一维数组中的引用。

arr1[1]是访问arr1这个二维数组中的第二个一维数组的引用。

第一种遍历方法 

  public static void main(String[] args) {int[][] arr1=new int[][]{{1,2,3},{4,5,6}};int[][] arr2=new int[2][3];int[][] arr3={{1,2,3},{1,2,3}};for(int i=0;i<arr1.length;i++){//打印行for(int j=0;j<arr1[i].length;j++){//打印列System.out.print(arr1[i][j]+" ");}System.out.println();}}

第二种遍历方法 

 public static void main(String[] args) {int[][] arr1=new int[][]{{1,2,3},{4,5,6}};int[][] arr2=new int[2][3];int[][] arr3={{1,2,3},{1,2,3}};for(int[] subarr1:arr1){for(int x:subarr1){System.out.print(x+" ");}System.out.println();}
}

4.3 不规则二维数组

首先,我们要知道二维数组在创建的时候,行不可以省略,列可以省略。

 public static void main(String[] args) {int arr[][]=new int[2][];arr[0]=new int[]{1,2,3};arr[1]=new int[]{4,5,6,70};for(int i=0;i< arr.length;i++){for(int j=0;j<arr[i].length;j++){System.out.print(arr[i][j]+" ");}System.out.println();}}

运行代码

2558195c0c7d4ea286cae0342eb2ae8f.png

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

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

相关文章

攻防世界-web-command_execution

题目&#xff1a; 原理&#xff1a; | 的作用为将前一个命令的结果传递给后一个命令作为输入 &&的作用是前一条命令执行成功时&#xff0c;才执行后一条命令 方法一&#xff1a; 第一步&#xff1a; 1.打开浏览器&#xff0c;在文本框内输入127.0.0.1 | find / -name…

【声呐仿真】学习记录2.5-DAVE项目部分文档大纲

【声呐仿真】学习记录2.5-DAVE项目 一、Dave Models 模型Vehicle Models 航行器模型New Underwater Vehicle 新型水下航行器Dave ROV ModelsDave Glider ModelsManipulator Models 机械臂模型UUV Simulator Examplesrexrovrexrov2desistek saga roveca_a9Light Autonomous Unde…

stata空间计量模型基础+检验命令LM检验、sem、门槛+arcgis画图

目录 怎么安装stata命令 3怎么使用已有的数据 4数据编辑器中查看数据 4怎么删除不要的列 4直接将字符型变量转化为数值型的命令 4改变字符长度 4描述分析 4取对数 5相关性分析 5单位根检验 5权重矩阵标准化 6计算泰尔指数 6做核密度图 7Moran’s I 指数 8空间计量模型 9LM检验…

Follow the Money:2023年最赚钱的十家国内芯片设计上市公司及其整体表现

作者&#xff1a;北京华兴万邦管理咨询有限公司 商瑞 马华 摘要&#xff1a;尽管相较2022年有所下滑&#xff0c;但2023年最赚钱的十家国内芯片设计上市公司的净利润总额超过了159家A股和港股上市内地半导体企业利润总额的55%&#xff0c;但是其市值之和仅占159家上市半导体…

IndexedDB解密:打开Web应用的数据存储之门

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 IndexedDB解密&#xff1a;打开Web应用的数据存储之门 前言IndexedDB简介数据库操作数据检索与索引异步操作与事件处理 前言 在Web的世界里&#xff0c;数据就像是一群旅行者&#xff0c;它们来自各个…

【Python】PYQT5详细介绍

本专栏内容为&#xff1a;Python学习专栏 通过本专栏的深入学习&#xff0c;你可以了解并掌握Python。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;Python &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f3…

探索Linux:深入理解各种指令与用法

文章目录 cp指令mv指令cat指令more指令less指令head指令tail指令与时间相关的指令date指令 cal指令find指令grep指令zip/unzip指令总结 上一个Linux文章我们介绍了大部分指令&#xff0c;这节我们将继续介绍Linux的指令和用法。 cp指令 功能&#xff1a;复制文件或者目录 语法…

量子波函数白话解释

关键词&#xff1a;Quantum Wave Function 文章目录 一、说明二、什么是波函数&#xff1f;三 量子波的可视化四、量子波的概率解释 一、说明 在量子力学中&#xff0c;粒子是我们只有在测量它们时才能看到的东西。其中运动模式由满足薛定谔方程的波函数描述。波函数并非量子…

基于JSP动漫论坛的设计与实现(四)

目录 功能模块测试 6.1 测试概述及所用方案 6.1.1软件测试概述 6.1.3 测试的步骤 6.1.4 测试的主要内容 6.1.5 测试方案 6.1.6测试设计 6.2 前端功能测试 6.2.1 登录功能测试 6.2.2 注册功能测试 6.2.3 发帖功能测试 6.2.4 回复帖子测试 6.3 后台功能测试 6…

vulnhub靶场之FunBox-5

一.环境搭建 1.靶场描述 Lets separate the script-kids from script-teenies.Hint: The first impression is not always the right one!If you need hints, call me on twitter: 0815R2d2 Have fun...This works better with VirtualBox rather than VMwareThis works bett…

导电材料——分类、性能与性质

本篇为西安交通大学本科课程《电气材料基础》的笔记。 导电材料指的是能在电场下传导电流的材料。导体价电子所在能带为半满带&#xff0c;且相邻能级间隔小&#xff0c;外电场下电子很容易从低能级跃迁到高能级上&#xff0c;大量的电子很容易获得能量进行共有化运动&#xf…

NPDP|传统行业产品经理如何跨越鸿沟,从用户角度审视产品

随着科技的飞速发展和互联网的普及&#xff0c;产品经理的角色已经从单纯的产品规划者逐渐转变为全方位的用户体验设计者。对于传统行业的产品经理来说&#xff0c;这是一个挑战与机遇并存的时代。他们不仅要面对激烈的市场竞争&#xff0c;还要学会如何跨越与新兴科技行业之间…

Scala编程入门:从零开始的完整教程

目录 引言环境准备创建第一个Scala项目基本语法高阶概念进阶资源结语 引言 Scala是一种强大的、静态类型的、多范式编程语言&#xff0c;它结合了面向对象和函数式编程的特点。本教程将指导您如何从零开始学习Scala&#xff0c;并搭建一个简单的开发环境。让我们开始探索Scala…

【好困】磁场里的瞌睡虫:地磁暴真的会让我们感到疲倦吗?

【好困】磁场里的瞌睡虫&#xff1a;地磁暴真的会让我们感到疲倦吗&#xff1f; 写在最前面地磁暴真的会让我们感到疲倦吗&#xff1f;一探究竟地磁暴是什么&#xff1f;地磁暴如何影响人体&#xff1f;结论 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每…

对话易参创始人黄怡然:股权能不能赋能企业增长?| 极新企服直播实录

“ 致所有爱画饼的老板 ” 整理 | 云舒 编辑 | 小白 出品&#xff5c;极新 2022年以前&#xff0c;股权激励作为企业实现增长、吸引人才、保留人才并大幅度激发人才价值的重要手段&#xff0c;几乎成为每一个企业的标配。但是&#xff0c;现在这个时代&#xff0c;股权激励几…

简易的Web登录功能(Servlet,mybatis,MySQL)

效果 介绍 javaEE项目&#xff0c;见123 JDK8&#xff0c;JavaEE8 项目结构(下面没写的文件就是空的&#xff0c;或者系统自动生成的) mysql中的表 步骤 创建Web页面引入mybatis,MySQL依赖写后端程序() 1 创建Web页面 index.html <!DOCTYPE html> <html l…

深度学习:基于人工神经网络ANN的降雨预测

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 本专栏涉及创建深度学习模型、处理非结构化数据以及指导复杂的模型&#xff0c;如卷积神经网络(CNN)、递归神经网络 (RNN)&#xff0c;包括长短期记忆 (LSTM) 、门控循环单元 (GRU)、自动编码器 (AE)、受限玻尔兹曼机(…

【Linux】-网络请求和下载、端口[6]

目录 一、网络请求和下载 1、ping命令 2、wget命令 3、curl命令 二、端口 1、虚拟端口 2、查看端口占用 一、网络请求和下载 1、ping命令 可以通过ping命令&#xff0c;检查指定的网络服务器是否可联通状态 语法&#xff1a;ping [ -c num ] ip或主机名 选项&…

Flutter3.x get-cli中运行get init初始化项目报错如何处理

Flutter get-cli中运行get init初始化项目会提示如下错误&#xff1a; get init s E:\flutter\flutter study\tempstudy\misapp01> get init 1)Getx Pattern (by Kau) 2)CLEAN (by Arktekko) which architecture do you want to use? [1] unhandled exception: Synchromu…

Fendi club啤酒与精酿文化的碰撞与整合

在啤酒的世界中&#xff0c;精酿啤酒文化正逐渐崛起&#xff0c;成为了品质和品味的象征。作为精酿啤酒的代表&#xff0c;Fendi club啤酒与精酿文化的碰撞与整合&#xff0c;不仅推动了啤酒产业的发展&#xff0c;更是一种全新的生活方式。 Fendi club啤酒一直秉持着对品质的追…