【1】数组的定义
数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。
数组的四个基本特点:
1.长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
2.其元素的类型必须是相同类型,不允许出现混合类型。
3.数组类型可以是任何数据类型,包括基本类型和引用类型。
4.数组有索引的:索引从0开始,到 数组.length-1 结束
5.数组变量属于引用类型,数组也是对象。
PS:数组变量属于引用类型,数组也是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存储的。
【2】数组的学习:
public class TestArray02{ public static void main(String[] args){ //数组的作用:用来存储相同类型的数据 //以int类型数据为案例:数组用来存储int类型数据 //1.声明(定义数组) int[] arr; //定义一个int类型的数组,名字叫arr //int arr2[]; //如果数组只声明,没有后续操作,那么这个数组相当于没定义 //int[] arr3 = null;//空 辨别:数组赋值为null和什么都没有赋值 不一样的效果 //2.创建 arr = new int[4];//给数组开辟了一个长度为4的空间 //编译期声明和创建会被合为一句话: int[] arr = new int[4]; //3.赋值 arr[0] = 12; arr[3] = 47; arr[2] = 98; arr[1] = 56; arr[2] = 66; /* arr[4] = 93; 出现异常:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 Array 数组 Index 索引 OutOf 超出 Bounds 界限 Exception 异常 ---》数组索引越界异常 */ //4.使用 System.out.println(arr[2]); System.out.println(arr[0]+100); //通过数组一个属性来获取 length 长度 System.out.println("数组的长度是:"+arr.length); } }
【3】数组的遍历
import java.util.Scanner; public class TestArray03{ public static void main(String[] args){ //功能:键盘录入十个学生的成绩,求和,求平均数: //定义一个int类型的数组,长度为10 : int[] scores = new int[10]; //定义一个求和的变量: int sum = 0; Scanner sc = new Scanner(System.in); for(int i=1;i<=10;i++){//i:控制循环次数 System.out.print("请录入第"+i+"个学生的成绩:"); int score = sc.nextInt(); scores[i-1] = score; sum += score; } System.out.println("十个学生的成绩之和为:"+sum); System.out.println("十个学生的成绩平均数为:"+sum/10); //求第6个学生的成绩: //System.out.println(scores[5]); /* System.out.println(scores[0]); System.out.println(scores[1]); System.out.println(scores[2]); System.out.println(scores[3]); //.... System.out.println(scores[9]); */ //将数组中的每个元素进行查看--》数组的遍历: //方式1:普通for循环---》正向遍历: for(int i=0;i<=9;i++){ System.out.println("第"+(i+1)+"个学生的成绩为:"+scores[i]); } //方式2:增强for循环: //对scores数组进行遍历,遍历出来每个元素都用int类型的num接收: int count = 0; for(int num:scores){ count++; //每次都将num在控制台输出 System.out.println("第"+count+"个学生的成绩为:"+num); } /* 增强for循环: 优点:代码简单 缺点:单纯的增强for循环不能涉及跟索引相关的操作 */ //方式3:利用普通for循环: 逆向遍历: for(int i=9;i>=0;i--){ System.out.println("第"+(i+1)+"个学生的成绩为:"+scores[i]); } } }
【4】数组的三种初始化方式
数组的初始化方式总共有三种:静态初始化、动态初始化、默认初始化。
静态初始化
除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。
eg:
int[] arr = {12,23,45};
int[] arr = new int[]{12,23,45};
注意:
1.new int[3]{12,23,45};-->错误
2.int[] arr ;
arr = {12,23,45}; --->错误
动态初始化
数组定义与为数组元素分配空间并赋值的操作分开进行。
eg:
int[] arr ;
arr = new int[3]
arr[0] = 12;
arr[1] = 23;
arr[2] = 45;
默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
int[] arr = new int[3]; ---> 数组有默认的初始化值
【5】数组的应用