数组是指一组数据的集合,数组中的每个数据被称作元素。
在数组中可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致。
1数组的定义和初始化
数据类型[] 数组名 = new 数据类型[元素个数或数组长度];
(数据类型就是两种:基本数据类型和引用数据类型)
int[] x = new int[100];
这条语句就相当于在内存中定义了100个int类型的变量,第一个变量的名称为x[0],第二个变量的名称为x[1],以此类推,第100个变量的名称为x[99],这些变量的初始值都是0。
数组长度用一个属性length表示:x.length。
1.1 Java虚拟机运行时数据区包括五部分
Java是在虚拟机上运行,而虚拟机是在内存运行,
Jvm在内存上开辟一块空间,分五部分:(345重要)
1)寄存器:处理cpu相关的
2)本地方法栈:与操作系统有关的
3)方法和数据共享区:class文件进入的地方
4)栈:程序中所有方法进入的地方,变量也进栈,基本数据类型进栈
5)堆:程序中所有容器和对象进入的地方,引用数据类型进堆
class Demo04 { public static void main(String[] args) { //定义数组1 int[] arr=new int[3]; //赋值 arr[0]=2; System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); System.out.println(arr); //结果是一个地址 System.out.println(arr.length); //数组长度 } }
可以再定义一个数组等于这个数组,但是类型必须相同:
Int[] arr1=arr; //就是把地址赋值给新的数组变量
变量引用数组的情况图示说明:
步骤说明:
1).class文件进入方法和数据共享区,找到main方法
2)main方法进入栈,遇到new,就创建一个数组容器,进入堆
3)数组长度是3,就在堆中开辟了三块空间,分别有一个“门牌号”,就是下标:0,1,2,并分别存入默认值0
4)给数组分配一个地址
5)把这个地址赋值给变量arr
6)通过arr找到数组的地址,然后找到下标为0的元素,改变其值为2
7)通过arr找到数组元素,并打印出里面的值:2,0,0
在定义数组时只指定数组的长度,由系统自动为元素赋初值的方式称作动态初始化。
在初始化数组时还有一种方式叫做静态初始化,就是在定义数组的同时就为数组的每个元素赋值。数组的静态初始化有两种方式:
1)类型[] 数组名 = new 类型[]{元素,元素,……};
2)类型[] 数组名 = {元素,元素,元素,……};
为了简便,建议采用第二种方式
class Demo04 { public static void main(String[] args) { //定义数组2 String[] arr2=new String[]{"中国","你好","DG","shit"}; System.out.println(arr2[0]); System.out.println(arr2[1]); System.out.println(arr2[2]); System.out.println(arr2[3]); } }
数组遍历
在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。
使用for循环来遍历数组:
class Demo05 { public static void main(String[] args) { //遍历数组 int[] arr={1,2,3,4,5,6,7,8,9,10}; for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } } }
数组最值
例:获取数组中元素的最大值
public class ArrayDemo{ public static void main(String[] args){ int[] arr = { 4, 1, 6, 3, 9, 8 }; int max = arr[0]; //假设第一个元素为最大值 //遍历数组 for (int x = 1; x < arr.length; x++) { if (arr[x] > max) { //比较 arr[x]的值是否大于max max = arr[x]; //条件成立,将arr[x]的值赋给max } } System.out.println("max=" + max); } }
数组越界异常
每个数组的索引都有一个范围,即0~length-1。在访问数组的元素时,索引不能超出这个范围,否则程序会报错。
class NullPoint { public static void main(String[] args) { int[] arr = new int[4]; System.out.println(arr[4]); } }
空指针异常
在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null,则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现空指针异常。
class NullPoint { public static void main(String[] args) { String[] arr2={"aaa","bbb","ccc"}; arr2=null; //把地址置为空,就找不到数组了 System.out.println(arr2[0]); //这时再访问数组元素就是空指针异常 } }