变量是一种容器,可以存放数据,但是一次只能存放一个数据。如果放进去一个新数据,那么老数据将会被替换。
数组也是一种容器,也可以存放数据,但是数组可以同时存放好多个数据。

一、数组的特点:

  1. 数组本身是引用数据类型,但是里面也能存放基本类型,也能存放引用类型。
  2. 数组当中的数据,必须类型统一。
  3. 数组的长度一旦确定,不可以发生改变。

二、如何创建数组

初始化:在内存当中为数组开辟空间,并且赋予默认值。

数组的初始化方式:

  1. 动态初始化(指定长度)
  2. 静态初始化(指定内容)

动态初始化格式:
数据类型[] 数组名称 = new 数据类型[长度];

备注:左侧的写法其实可以有两种。
数据类型[] 数组名称 = … 【推荐】
数据类型 数组名称[] = …

动态初始化,指定了数组的长度。

静态初始化,用来直接指定数组具体的元素内容。

静态初始化的标准格式:

数据类型[] 数组名称 = new 数据类型[] { 元素1, 元素2, 元素3, …};

省略格式:数据类型[] 数组名称 = { 元素1, 元素2, 元素3, …};

注意事项:

静态初始化虽然没有直接指定长度,但是根据内容也可以推算得到长度。
静态的省略格式,虽然没有new关键字,但是内存当中仍然还是会开辟空间创建数组的。
动态初始化、静态初始化的标准格式,都可以拆分成为两个步骤。
静态初始化的省略格式,不可以拆分成为两个步骤。只能一次性完成。

使用建议:

如果知道了数组的固定长度,但是里面的内容还不确定,那么尽量使用动态初始化指定长度。
如果直接知晓了数组具体的元素内容,那么就可以直接使用静态初始化指定内容。

三、如何访问数组

1、访问具体数组元素的格式:
数组名称[索引编号]

索引编号:数组当中的每一个元素都有一个int类型编号,从0开始,一直到“数组长度-1”为止。

2、如果希望改变数组元素的内容,格式完全一样。
数组名称[索引编号] = 数据值;

使用动态初始化,创建数组的时候没说具体元素是什么,那么就会有一个默认值:
如果是整数,默认为0;
如果是小数,默认为0.0;
如果是字符,默认为’u0000’;
如果是布尔,默认为false;
如果是引用类型,默认为null(特殊标记,代表什么数据都没有的意思)。

四、数组在内存中的存储

https://www.chenqi.fun/wp-content/uploads/2018/07/shuzu-1024x849.png

五、数组的常见操作

1、数组越界异常

创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运 行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一 旦出现了,就必须要修改我们编写的代码。

2.空指针异常

观察一下代码,运行后会出现什么结果。

public static void main(String[] args) {

int[] arr = {1,2,3};

arr = null;

System.out.println(arr[0]);

}
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候 会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修 改我们编写的代码。

六、数组的遍历

https://www.chenqi.fun/wp-content/uploads/2018/07/shuzu2.png

6.1数组获取最大值

数组中获取最大值:
思想:–定义变量,保存数组0索引的元素。
–遍历数组,获取数组的每个元素。
–将遍历到的元素和保存数组0索引上的值进行比较
–如果数组元素的值大于了变量的值,变量记住新的值
–数组循环结束,变量保存的就是数组中的最大值。

//获取数组最大值

int[] arr2 = {1, -1, 3, 333, 555, 6666};

int max = arr2[0];

for (int i = 0; i < arr2.length; i++) {

if (arr2[i] > max) {

max = arr2[i];

}

}

System.out.println(“max is ” + max);

6.2数组的反转

/*

* 数组的反转:1 2 3 4 5 ->5 4 3 2 1

*       思想:

*            –反转就是将数组最远端的元素交换位置。

*            –定义两个变量,保存数组的最小索引和最大索引。

*            –两个索引上的元素交换位置。

*            –最小索引++,最大索引–,再次交换位置。

*            –最小索引超过了最大索引,数组反转操作结束。

* */

public class Demo03 {

public static void main(String[] args) {

int[] arr = {1, 2, 3, 4, 5};

for (int min = 0, max = arr.length – 1; min <= max; min++, max–) {

int temp = arr[min];   //temp=1

arr[min] = arr[max];   //min=5;

arr[max] = temp;       //max=1

}

for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i] + ” “);

}

}

七、数组作为方法参数和返回值

1、数组作为方法参数传递,传递的是数组的内存地址

2、数组作为方法的返回值,返回的是数组的内存地址

3、方法的参数为基本类型时,传递的是数据值.

方法的参数为引用类型时,传递的是地址值.

Last modification:July 29th, 2019 at 04:14 pm