1、数组的定义:
概念 |
同一种类型数据的集合。其实数组就是一个容器。 |
数组的好处 |
可以自动给数组中的元素从0开始编号,方便操作这些元素。 |
格式1: |
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; 示例:int[] arr = new int[5]; |
格式2: |
元素类型[] 数组名 = new 元素类型[]{元素,元素,……}; int[] arr = new int[]{3,5,1,7}; int[] arr = {3,5,1,7}; |
class ArrayDemo { public static void main(String[] args) { /* 数组的定义方式: 元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; 好处:数组可以存储多个数据,而且可以对数据进行编号, 从0开始。操作元素完成可以通过编号(索引)完成。 */ int[] arr = new int[3];//通过new关键字创建了一个长度为3,元素类型是int的数组实体。 System.out.println(arr[1]); /* Java对内存空间的划分:五部分: 栈,堆,方法区,本地方法区,寄存器。 栈内存:存储都是局部变量。只要是在方法中定义的变量都是具备变量。 一旦变量的生命周期结束该变量就被释放。 堆内存:存储都是实体(对象) 每一个实体都有一个首地址值。 堆内存的变量都有默认初始化值。不同类型不一样。int-0 double-0.0 boolean-false char-'u0000' 当实体不在使用时,就会被垃圾回收机制处理。 */ } }
2、数组内存结构
Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。 |
栈内存 |
l 用于存储局部变量,当数据使用完,所占空间会自动释放。
|
堆内存 |
l 数组和对象,通过new建立的实例都存放在堆内存中。
l 每一个实体都有内存地址值
l 实体中的变量都有默认初始化值
l 实体不在被使用,会在不确定的时间内被垃圾回收器回收
|
方法区,本地方法区,寄存器 |
3、数组操作的常见错误
数组脚标越界异常(ArrayIndexOutOfBoundsException) |
int[] arr = new int[2]; System.out.println(arr[3]); 访问到了数组中的不存在的脚标时发生。 |
空指针异常(NullPointerException) |
int[] arr = null; System.out.println(arr[0]); arr引用没有指向实体,却在操作实体中的元素时。 |
class ArrayDemo2 { public static void main(String[] args) { int[] arr = new int[3]; //System.out.println(arr[3]);//ArrayIndexOutOfBoundsException:访问到了数组不存在的索引时,会发生该异常。 arr = null; System.out.println(arr[0]);//NullPointerException:当使用没有任何实体指向的引用变量操作实体时,运行会发生该异常。 } }
4、数组的遍历
class ArrayDemo3 { public static void main(String[] args) { //数组定义格式二: //int[] arr = new int[]{34,12,89}; int[] arr = {34,12,89,50,11,78}; //如何获取数组的长度呢?通过数组的属性 length System.out.println(arr.length); for(int x=0; x<arr.length; x++) { System.out.println("arr["+x+"]="+arr[x]); } } }
5、数组的运算操作
class ArrayTest { public static void main(String[] args) { int[] arr = {23,14,22,88,45,90,17}; int[] arr2 = {3,1,45,7,9}; int sum = add(arr2); System.out.println("Hello World!"); } //获取多个数的和的功能。 /* 明确1:结果?和 int。 明确2:参数?多个数,定义多个参数合适吗?既然是一组数,数组。 */ public static int add(int[] arr) { //1,定义变量记录和。 int sum = 0; //2,通过循环对数组进行遍历。 for(int x=0; x<arr.length; x++) { sum = sum + arr[x]; } return sum; } //两个整数求和的功能。 public static int add(int a,int b) { return a+b; } //三个整数求和。 public static int add(int a,int b,int c) { return a+b+c; } }
6、获取数组中的最大值
class ArrayTest { public static void main(String[] args) { int[] arr = {23,14,22,88,45,90,17}; int[] arr2 = {3,1,45,7,9}; int sum = add(arr2); System.out.println("Hello World!"); } //获取多个数的和的功能。 /* 明确1:结果?和 int。 明确2:参数?多个数,定义多个参数合适吗?既然是一组数,数组。 */ public static int add(int[] arr) { //1,定义变量记录和。 int sum = 0; //2,通过循环对数组进行遍历。 for(int x=0; x<arr.length; x++) { sum = sum + arr[x]; } return sum; } //两个整数求和的功能。 public static int add(int a,int b) { return a+b; } //三个整数求和。 public static int add(int a,int b,int c) { return a+b+c; } }
7、数组内存图解
