一、数组
1.数组:数组就是存储数据长度固定的容器(集合),存储多个数据的数据类型要一致。
2.数组本身是引用数据类型 但是数组的元素可以是任何数据类型,包括基本数据类型和引用数 据类型。
创建数组对象会在内存中开辟一块连续的空间 数组名引用这块连续空间的地址
数组的长度一旦确定 就不能修改
可以通过下标(索引)的方式调用指定位置的元素
3.数组的定义格式
①数组类型[] 数组名
int[] arr;
double[] arr;
char[] arr;
②数据类型 数组名[]
int arr[];
double arr[];
char arr[];
③动态初始化数组
数组动态初始化就是只给定数组的长度,由系统给出默认初始化值
动态初始化格式
数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
-
等号左边:
-
int:数组的数据类型
-
[]:代表这是一个数组
-
arr:代表数组的名称
-
-
等号右边:
-
new:为数组开辟内存空间
-
int:数组的数据类型
-
[]:代表这是一个数组
-
5:代表数组的长度
-
④静态初始化
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
数据类型[] 数组名 = {元素1,元素2,...};
public class ArrayDemo {
public static void main(String[] args) {
//定义数组
int[] arr = {1, 2, 3};
//输出数组名
System.out.println(arr);
//输出数组中的元素
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
4.数组元素的访问
(1).什么是索引:每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。
这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
访问数组元素的格式
数组名[索引];
public class ArrayDemo {
public static void main(String[] args) {
double[] arr = new int[3];
//输出数组名
System.out.println(arr); //[I@880ec60
//输出数组中的元素
System.out.println(arr[0]);// 0.0
System.out.println(arr[1]);// 0.0
System.out.println(arr[2]);// 0.0
arr[0] = 1;
//
int i = 0;
System.out.println(i);
}
}
5.内存概述
内存是计算机中的重要原件,临时存储区域,作用是运行程序。 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。必须放进内存中才能运行,运行完毕后会清空内存。Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
寄存器 | 给CPU使用 |
本地方法栈 | JVM在使用操作系统功能的时候使用 |
方法区 | 存储可以运行的class文件。 |
堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存。 |
方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。 |
6.索引越界异常
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr[3]);
}
}
数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。
程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
空指针异常
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
//把null赋值给数组
arr = null;
System.out.println(arr[0]);
}
}
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
7.数组遍历
数组的索引是 0 到 lenght-1 ,可以作为循环的条件出现。
public class ArrayTest01 {
public static void main(String[] args) {
//定义数组
int[] arr = {11, 22, 33, 44, 55};
//使用通用的遍历格式
for(int x=0; x<arr.length; x++) {
System.out.println(arr[x]);
}
}
}