搜索
写经验 领红包

java数组基础知识(java数组知识)

导语:Java学习笔记(四):数组

java数组基础知识(java数组知识)

之前学过基本数据类型包括整数(byte、short、int、long)、小数(float、double)、字符(char)、布尔(boolean),今天学习的数组属于引用数据类型,顾名思义,数组的作用就是用来盛一组数据,注意,同一个数组中的数据类型应该是相同的。下面我们从数组的定义格式等方面来看一看。

数组的定义格式:

1、第一种:数据类型[] 名称=new 数据类型[数组的长度];

举个例子:int[] arr=new int[5];

在这条语句中,int表示定义的数组是int类型,数组的名字是arr,这是可以随便取的,new是干什么的呢,我们知道,数组是引用类型,盛放大量的数据,所以就需要用new来向内存申请一块内存空间,那么怎么申请空间呢,就像去教室占座,你只说这个位置是你的,那别人又不知道,看到空着就坐上去了,怎么办?所以你会放本书在座位上。申请内存空间也是这样,不过在这里我们叫做占位符。例如,定义长度为五的一个double类型的数组,申请空间时会在这块空间上放上五个占位符(0.0)。

2、第二种:数据类型[] 名称=new 数据类型[]{a,a,a,…,a,a};

举个例子:int[] arr=new int[]{1,2,3,4,5};

3、第三种:数据类型[] 名称={a,a,a,…,a,a};

举个例子:int[] arr={1,2,3,4,5};

注意:第一种和第二种格式可以分开定义,例如:

int[] arr;

arr=new int[5];

而第三种不可以这样定义。

数组的访问:

1、有人可能会认为数组的访问和基本数据类型的访问一样,例如:

System.out.println(arr);

然而这样输出的只是数组在内存中的存储地址,arr中存放的不是数组的数据,而是数组的地址,这个后面画个图就好理解了。

2、数组的访问需要用到索引(角标、下标)。数组的下标是从0开始的,下面首先给出数组和下标的一一对应关系。

数据(int)

2

3

5

4

8

下标

0

1

2

3

4

当想要打印第三个数据5时,可以使用这条语句:

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

更改第五个数据为8为9,使用这条语句:

arr[4]=9;

总之,不论对数组中的数据执行什么操作,都要用arr[i]。

数组的内存图:

数组的在内存中存储在堆中,下面分析三种情况的数组在内存中的存储情况,分别给出三段代码和程序运行图解,结合图解分析代码的执行流程。这三种情况分别是一个数组的内存图、两个数组的内存图、两个变量指向同一个数组的内存图。

1、代码

Public static void main(String[] args){

int[] arr;

arr=new int[3];

arr[1]=10;

System.out.println(arr);

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

}

第一步将方法区中的main方法调用到栈中执行,定义一个整型数组arr(图中的代码写错了,应该是int[] arr;),第二步通过new在堆中申请一块内存空间,并且放上占位符0,第三步将第二个(下标为1)数据赋值为10,第四步打印arr,输出的是数组的首地址,第五步打印arr[1],输出的是数组的第二个数据10。

2、代码:

public static void main(String[] args){

int[] arr1=new int[]{1,2,3};

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

int[] arr2=new int[]{1,2,3};

arr2[0]=8;

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

}

数组arr1和arr2右边的代码一模一样,但这并不是意味着它们俩指向同一个数组,而是arr2使用new重新申请了一块内存空间。

3、代码:

Public static void main(String[] args){

int[] arr1=new int[]{1,2,3};

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

int[] arr2=arr1;

arr2[1]=7;

System.out.println(arr2[1]);

}

数组名指向的是数组的地址,将arr1赋值给arr2,也就是将arr1数组的地址给了arr2,这样一来,arr2有了“钥匙”,便也能够访问和操作数组了,因此两个变量指向了同一个数组。

数组常见的问题:

空指针异常(NullPointerException)

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

Arr=null;

System.out.println(arr[1]);// NullPointerException

数组名存储着数组的地址,只有通过这个地址才能准确地访问操作数组,上述代码将数组名arr赋为空,自然会找不到数组,从而出现空指针异常。

索引越界异常(ArrayIndexOutOfBoundsException)

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

System.out.println(arr[6]);// ArrayIndexOutOfBoundsException

查找数组元素依靠的是数组下标,下标从0开始,到数组长度-1,并且数组从定义开始数组长度就固定了,是不可变的,上述代码数组长度为3,数组下标是0、1、2,但打印时却打印下标为6的元素,自然是不可能找到,从而出现索引越界异常。

本文内容由快快网络小冰创作整理编辑!