所谓数组,就是有序的元素序列 ,在数学里面都有讲到这个概念。 那么程序中的数组和数学里的数组又有哪些不同呢? 一、数组的定义与访问举一个现实生活中的例子: 一个500毫升的杯子,既可以拿来装水,也可以拿来装牛奶,还可以拿来装果汁。
故数组就是存储数据的长度固定的容器,可以保存多个数据。 特点:保存的数据类型要一致,不能既装牛奶又装果汁。 1数组的格式一: 2数组的其他格式: 格式中不定义格式的长度,长度由后面的元素个数决定; {1,2,3,4,5,6}:提前初始化数组的元素,可以有任意多个,但元素的类型要和前面定义的数据类型相匹配。 小结: 当数据确定时,可以使用格式二或者格式三来定义数组,这种方式也叫静态定义。 当数据不确定时,可以使用格式一来定义数组,这种方式也叫动态定义。 3数组的访问: 在定义好数组后,打印它显示出来的是一串字符而不是具体的数组 那这是为什么呢? 打印出来的这串字符其实是数组的一个地址,那如何去访问具体的数值呢? 这就需要借助于索引了,什么是索引? 每个存入数组的数值都会有一个对应的角标,这就是索引,并且索引是从0开始的。 访问具体数值的格式:数组名[索引];获取数值后直接打印就好了。 4数组的长度属性 用数组名.length可以获取数组的长度。 因为数组索引是由0开始的,所以数组最大的索引值为数组名.length-1。 5数组的初始值 数组在没有给其初始化赋值时 比如:int arr=new int[10] 暂且只知道数组长度为10,并没有说明各个索引位的数值是多少。 实际上不同数据类型的数值,在未给其赋值时,都会有一个默认值。 用代码验证如下: 从中我们可以知道:
二、数组原理内存图1.内存的概念 内存是一个很常见的概念,电脑有电脑内存,手机也有手机内存。 内存是程序的临时存储区域,我们编写的程序是存放在硬盘中的,但是在硬盘中到的程序是不会运行的,必须要放进内存中才能运行,运行完毕后会清空内存。 JVM作为Java虚拟机,它要运行程序,自然要对内存进行划分和管理:
那数组在内存中又是如何存储的呢? 画图分析:
2.两个变量指向一个数组 先看下面的代码: 为何同样是arr[0],先后打印的值不一样? 数组arr2虽然是另一个变量,但是它并不是new操作(重新定义一个数组),而是将arr赋值给了它,所以在堆内存中并没有开辟新的空间,而是和arr一样的空间。 画一下内存分布图: 三、数组的常见操作1.数组越界 前面我们知道了数组是有固定长度的,比如int[] arr={1,2,3} 数组arr它一共有3个元素,索引值为0、1、2,最大为2,若是arr[3]去访问数组,就会出现数组越界异常。 2.空指针异常 看如下代码: arr=null这行代码。 意味着变量arr不再保存数组的地址,也就是一个null数组,对它进行操作会报空指针异常。 我网络上查了下没法选null数组有何应用,暂且就当这样操作数组后,数组就作废了吧。 3.数组遍历 何为遍历? 就是将数组中的每个元素一一获取出来。 数组的索引是0到arr.length-1,所以可以利用for循环将数组一一打印出来 4.数组获取最大值元素 思路:
4.数组反转 数组反转就是将数组中的元素颠倒。 思路:
ps:数值作为方法参数和返回值
总结 |
|
来自: 刘小爱v > 《Java学习笔记》