「Java」基础12:什么叫数组?

「Java」基础12:什么叫数组?画一下内存分布图:三、数组的常见操作1.数组越界前面我们知道了数组是有固定长度的,比如int[]arr={1,2,3}数组arr它一共有3个元素

欢迎大家来到IT世界,在知识的湖畔探索吧!

「Java」基础12:什么叫数组?

所谓数组,就是有序的元素序列 ,在数学里面都有讲到这个概念。

那么程序中的数组和数学里的数组又有哪些不同呢?

一、数组的定义与访问

举一个现实生活中的例子:

一个500毫升的杯子,既可以拿来装水,也可以拿来装牛奶,还可以拿来装果汁。

  • 数组就相当于这个杯子,是一个容器
  • 水、牛奶、果汁就相当于容器里装的数据
  • 水、牛奶、果汁分别对应了不同的数据类型

故数组就是存储数据的长度固定的容器,可以保存多个数据。

特点:保存的数据类型要一致,不能既装牛奶又装果汁。

1数组的格式一:

「Java」基础12:什么叫数组?

2数组的其他格式:

「Java」基础12:什么叫数组?

格式中不定义格式的长度,长度由后面的元素个数决定;

{1,2,3,4,5,6}:提前初始化数组的元素,可以有任意多个,但元素的类型要和前面定义的数据类型相匹配

小结:

当数据确定时,可以使用格式二或者格式三来定义数组,这种方式也叫静态定义。

当数据不确定时,可以使用格式一来定义数组,这种方式也叫动态定义。

3数组的访问:

在定义好数组后,打印它显示出来的是一串字符而不是具体的数组

「Java」基础12:什么叫数组?

那这是为什么呢?

打印出来的这串字符其实是数组的一个地址,那如何去访问具体的数值呢?

这就需要借助于索引了,什么是索引?

每个存入数组的数值都会有一个对应的角标,这就是索引,并且索引是从0开始的。

访问具体数值的格式:数组名[索引];获取数值后直接打印就好了。

4数组的长度属性

「Java」基础12:什么叫数组?

用数组名.length可以获取数组的长度。

因为数组索引是由0开始的,所以数组最大的索引值为数组名.length-1。

5数组的初始值

数组在没有给其初始化赋值时

比如:int arr=new int[10]

暂且只知道数组长度为10,并没有说明各个索引位的数值是多少。

实际上不同数据类型的数值,在未给其赋值时,都会有一个默认值。

用代码验证如下:

「Java」基础12:什么叫数组?

从中我们可以知道:

  • 整数类型数组默认值是0
  • 小数类型数组默认值是0.0
  • 字符类型数组默认值是空
  • 布尔类型数组默认值是false
  • 引用数据类型数组默认值是null

二、数组原理内存图

1.内存的概念

内存是一个很常见的概念,电脑有电脑内存,手机也有手机内存。

内存是程序的临时存储区域,我们编写的程序是存放在硬盘中的,但是在硬盘中到的程序是不会运行的,必须要放进内存中才能运行,运行完毕后会清空内存。

JVM作为Java虚拟机,它要运行程序,自然要对内存进行划分和管理:

  • 寄存器:给CPU使用
  • 本地方法栈:JVM在使用操作系统功能的时候使用
  • 方法区:存储可以运行的class文件
  • 堆内存:存储对象或者数组
  • 方法栈:方法运行时使用的内存

那数组在内存中又是如何存储的呢?

画图分析:

「Java」基础12:什么叫数组?

  • 数组的变量实际存储的就是堆内存中的地址。
  • 只要有new操作就会在堆内存中开辟空间。

2.两个变量指向一个数组

先看下面的代码:

「Java」基础12:什么叫数组?

为何同样是arr[0],先后打印的值不一样?

数组arr2虽然是另一个变量,但是它并不是new操作(重新定义一个数组),而是将arr赋值给了它,所以在堆内存中并没有开辟新的空间,而是和arr一样的空间。

画一下内存分布图:

「Java」基础12:什么叫数组?

三、数组的常见操作

1.数组越界

前面我们知道了数组是有固定长度的,比如int[] arr={1,2,3}

数组arr它一共有3个元素,索引值为0、1、2,最大为2,若是arr[3]去访问数组,就会出现数组越界异常。

2.空指针异常

看如下代码:

「Java」基础12:什么叫数组?

arr=null这行代码。

意味着变量arr不再保存数组的地址,也就是一个null数组,对它进行操作会报空指针异常。

我网络上查了下没法选null数组有何应用,暂且就当这样操作数组后,数组就作废了吧。

3.数组遍历

何为遍历?

就是将数组中的每个元素一一获取出来。

数组的索引是0到arr.length-1,所以可以利用for循环将数组一一打印出来

「Java」基础12:什么叫数组?

4.数组获取最大值元素

思路:

  • 定义最大值变量max,赋值为数组第一个数值
  • 遍历数组,获取数组每一个元素
  • 遍历时,将获取元素与max比较
  • 若是这个元素比max大,就将这个值赋给max
「Java」基础12:什么叫数组?

4.数组反转

数组反转就是将数组中的元素颠倒。

思路:

  • 将数组的索引(0到length-1)颠倒成(length-1到0)就好了
  • 也就是最大和最小索引交换,第二大和第二小索引交换,依次类推
  • 定义一个最大索引变量maxIndex,值为arr.length-1
  • 定义一个最小索引变量minIndex,值为0
  • 将minIndex和maxIndex的值做交换,交换完成后,将他们各自自增1,再数值交换,直到minIndex和maxIndex相等
「Java」基础12:什么叫数组?

ps:数值作为方法参数和返回值

  • 数组作为方法参数传递,传递的参数是数组内存的地址。
  • 数组作为方法的返回值,返回的是数组的内存地址

总结

「Java」基础12:什么叫数组?

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/73475.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信