java学习记录六:数组
一、数组的概念
java中的数组就是一个容器,可以存储多个数据,但是数据的类型必须一致
特点:
(1)可以存储多个数据
(2)多个数据的类型必须保持一致
(3)数组一旦创建,长度是永远不可以发生改变
二、数组的格式
//数据类型[ ] 数组名 推荐这个
//数据类型 数组名[ ]
int[] arrA = new int[3] //创建可以存储3个int数据的数组
数据类型决定数组只能存储这种类型的数据
三、数组变量的理解
数组变量存储的是地址值,指向数据存储在内存种的地址值,打印数组变量打印的是一个地址值。只能根据索引打印对应的数据,但是打印超出索引的会报错。
public class shuzu {
public static void main(String[] args) {
int[] arr = {1,2,3,4};
System.out.println(arr);//打印的是一个地址值[I@1b6d3586,一个16进制的整数数字
System.out.println(arr[0]);//可以根据索引打印对应的数据,但是打印超出索引的会报错
}
}
四、数组的初始化和默认值
1.初始化
第一种
int[] arr1 = new int[7]
//创建一个长度为7 的数组
第二种
int[] arr2 = new int[]{1,2,3,4,5}
//创建一个长度为5的数组,并且赋好了值,此时右边[]里不能再写长度了,jvm会根据{}里的长度来定义数组的长度,再写长度就会报错。
第三种
int[] arr3 = {1,2,3,4}
//简洁的写法,推荐这种写法。
2.数组默认值
public class shuzu {
public static void main(String[] args) {
int[] arr = new int[2];
System.out.println(arr);
System.out.println(arr[0]);//0
}
数组创建后,未赋值,此时默认值根据前面的数据类型都不一样
1.整数: 0
2.小数: 0.0
3.字符: 空白字符
4.布尔: false
四、数组的使用
1.数组的长度
arr.length//得到数组有多少个元素
2.修改数组
数组为引用类型,变量保存的是数组在内存中的地址,当修改数组时,同一个地址值的数组都会受到影响
int[] arr6 = {1,2,3};
int[] arr7 = arr6;
arr6[0] =100;
System.out.println(arr7[0]);//此时arr7的第一个值也变为100。基本类型不会发生这样的影响,只有引用类型会发生
五、JAVA中内存的分配
1.内存概念
编写的程序是在硬盘中,运行是在内存中。运行完后会清空内存,java是在虚拟机运行的,虚拟机是在内存中。
2.java虚拟机中内存分配
区域名称 | 作用 |
---|---|
寄存器 | 给CPU使用,和开发无关 |
本地方法栈 | JVM在使用操作系统功能的时候使用 |
方法区 | 存储可以运行的class文件,运行时会到方法栈中 |
堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存中 |
方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行 |
六、数组访问异常类
1.超出索引,越界异常
不能访问超过数组长度的数据,会报错
int[] one = {100,200,300}
//System.out.println(one[5]);//索引5: 不存在,报出数组索引越界异常
2.空指针异常
int[] one = null;
System.out.println(one);//null
//System.out.println(one[0]);//错误: 控制针异常
当设置数组为null时,可以打印数组为null,但不能访问数组内指定索引元素,会报空指针异常
七、遍历数组
int[] array = {10,20,30,50};
for (int i = 0; i < array.length; i++) {
//System.out.println("索引编号: "+i+", 对应的元素值: "+array[i]);
System.out.println(array[i]);
}