一、数组的定义
- 数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致
- 数组的定义格式
- 数据类型[] 数组名(常用):
int[] arr;
- 数据类型 数组名[]:
int arr[];
二、数组的动态初始化
- 概念:在初始化的时候, 需要手动指定数组的长度, 系统会为数组容器分配初始值
- 动态初始化格式:数据类型[] 数组名 = new 数据类型[数组的长度];
- 注意:打印数组变量的时候, 会打印出数组的内存地址
- [I@10f87f48:
- @ : 分隔符
- [ : 当前的空间是一个数组类型
- I : 当前数组容器中所存储的数据类型
- 10f87f48 : 十六进制内存地址
public static void main(String[] args) {
int[] arr = new int[5];
System.out.println(arr);
byte[] bArr = new byte[3];
System.out.println(bArr);
}
三、数组元素访问
- 数组的索引
- 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始
- 这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素
- 注意:数组在创建完毕后, 即使没有赋值, 也可以取出, 但取出的元素都是默认初始化值
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println("--------------");
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
- 数组默认值
- 整数类型:0
- 浮点数:0.0
- 布尔:false
- 字符:空字符
- 引用数据类型:null
四、内存分配
- 内存概述
- 内存是计算机中的重要原件,临时存储区域,作用是运行程序
- 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的;必须放进内存中才能运行,运行完毕后会清空内存
- Java虚拟机要运行程序,必须要对内存进行空间的分配和管理
区域名称 | 作用 |
---|
寄存器 | 给CPU使用,和我们开发无关。 |
本地方法栈 | JVM在使用操作系统功能的时候使用,和我们开发无关。 |
方法区 | 存储可以运行的class文件。 |
堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存。 |
方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。 |
五、数组的静态初始化
- 什么是静态初始化
- 数组静态初始化的两种格式
- 完整版格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
- 简化版格式:
数据类型[] 数组名 = {元素1,元素2,...};
public static void main(String[] args) {
int[] arr = new int[]{11,22,33};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
int[] arr2 = {44,55,66};
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
}
- 动态初始化和静态初始化的区别
- 动态初始化:手动指定数组长度,由系统给出默认初始化值
- 静态初始化:手动指定数组元素,系统会根据元素个数计算出数组的长度
六、数组操作的常见问题
- 数组越界
- 数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。
- 程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码
public class ArrayException {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr[3]);
}
}
- 空指针异常
- arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常
- 在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码
public class ArrayException {
public static void main(String[] args) {
arr = null;
System.out.println(arr[0]);
}
}
七、数组遍历
- 数组的索引是 0 到 lenght-1 ,可以作为循环的条件出现
- 获取数组元素数量:数组名.length
public class Test1Array {
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
System.out.println("arr数组中元素的个数为:" + arr.length);
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
}
八、数组的案例应用
public class Test2Array {
public static void main(String[] args) {
int[] arr = {12,45,98,73,60};
int max = arr[0];
for(int i = 1; i < arr.length; i++){
if(arr[i] > max){
max = arr[i];
}
}
System.out.println("max:" + max);
}
}
import java.util.Scanner;
public class Test3Array {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = 0;
int[] arr = new int[5];
for(int i = 0; i < arr.length; i++){
System.out.println("请输入第" + (i+1) + "个整数:");
arr[i] = sc.nextInt();
}
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println("sum:" + sum);
}
}
import java.util.Scanner;
public class Test4Array {
public static void main(String[] args) {
int[] arr = {19, 28, 37, 46, 50};
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要查找的元素:");
int num = sc.nextInt();
int index = -1;
for (int i = 0; i < arr.length; i++) {
if(num == arr[i]){
index = i;
break;
}
}
System.out.println(index);
}
}
import java.util.Scanner;
public class Test5Array {
public static void main(String[] args) {
int[] arr = new int[6];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第" + (i+1) + "个评委的打分:");
int score = sc.nextInt();
if(score >= 0 && score <= 100){
arr[i] = score;
}else{
System.out.println("您的打分输入有误, 请检查是否是0-100之间的");
i--;
}
}
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if(max < arr[i]){
max = arr[i];
}
}
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if(min > arr[i]){
min = arr[i];
}
}
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
int avg = (sum - max - min ) / 4;
System.out.println(avg);
}
}