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的元素,自然是不可能找到,从而出现索引越界异常。
本文内容由快快网络小冰创作整理编辑!