数组就是存储数据长度固定的容器,存储多个数据的数据类型。
1.2 数组的定义格式 1.2.1 第一种格式数据类型[] 数组名
代码如下:
int arr[]; double[] arr; char[] arr;1.2.2 第二种格式
数据类型 数组名[]
代码如下:
int arr[]; double arr[]; char arr[];1.3 数组的动态初始化 1.3.1 什么是动态初始化
数组的动态初始化就是指定数组的长度,由系统给出默认初始化值
1.3.2 动态初始化的格式数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[10];1.3.3 动态初始化格式详解
- 左边:
- int:数组的数据类型
- [] :代表这是一个数组
- arr :代表数组的名称
- 右边:
- new:为数组开辟内存空间
- int:数组的数据类型
- []:代表这是一个数组
- 10:代表数组的长度
代码如下:
package array;
public class Demo01Array {
public static void main(String[] args) {
int[] arr = new int[10];
// [I@1540e19d
System.out.println(arr);
byte[] barr = new byte[10];
// [B@677327b6
System.out.println(barr);
}
}
1.4 数组的元素访问
1.4.1 什么时索引
每一个存储到数组的元素,都会自动拥有一个编号,从0开始
这个自动编号称为数组的索引(index)可以通过数组的索引来访问数组中的元素
1.4.2 访问数组元素格式1.4.3 代码实例数组名[索引]
package array;
public class Demo2ArrayIndex {
public static void main(String[] args) {
// 0 1
int[] arr = new int[2];
// 数组的内存地址 [I@1540e19d
System.out.println(arr);
// 数组名[索引] 访问数组容器中的空间位置
System.out.println(arr[0]); // 0 系统自动分配默认初始化值
System.out.println(arr[1]);
// 分隔符
System.out.println("==========");
// 数组名[索引]
arr[0] = 1;
arr[1] = 2;
System.out.println(arr[0]);
System.out.println(arr[1]);
}
}
1.5 内存分配
1.5.1 内训概述
内存是计算机中的重要原件,临时存储区域,作用是运行程序。
我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。
必须放进内存中才能运行,运行完毕后会清空内存。
Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
1.5.2 java中的内存分配- 目前我们只需要记住两个内存,分别是:栈内存和堆内名称
| 名称 | 作用 |
| 寄存器 | 给CPU使用,和我们开发无关。 |
| 本地方法栈 | JVM在使用操作系统功能的时候使用,和我们开发无关。 |
| 方法 | 存储可以运行的class文件。 |
| 堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存。 |
| 方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。 |
在创建数组时,直接将元素确定
1.9.3 代码数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
package array;public class Demo03Array {
public static void main(String[] args) {
// 数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3...};
int[] arr = new int[]{22,33,44};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
// 数据类型[] 数组名 = {数据1,数据2,数据3...};
int[] arr2 = {77,88,99};
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
}
}
1.10 数组操作的两个常见问题
1.10.1 索引越界异常
- 出现原因
package array;
public class Demo04Array {
public static void main(String[] args) {
int[] arr = new int[2];
System.out.println(arr[3]);
}
}
数组长度为2,索引范围是0~1,但是我们却访问了一个3的索引。
程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不 能出现的,一旦出现了,就必须要修改我们编写的代码。
- 解决方案
将错误的索引修改为正确的索引范围即可!
1.10.2 空指针异常- 出现原因
package array;
public class Demo05Array {
public static void main(String[] args) {
int[] arr = new int[2];
// 把null赋值给数组
arr = null;
System.out.println(arr[0]);
}
}
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时 候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必 须要修改我们编写的代码。
- 解决方案
给数组一个真正的堆内存空间引用即可!
1.11 数组遍历- 数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。
package array;
public class Demo06Array {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
// 遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
数组复制的两种方法:
- Arrays.copyOf();
- System.arraycopy();
代码如下:
package student;
public class Student {
private int id;
private String name;
private int age;
private int score;
private String address;
public Student() {
super();
}
public Student(int id, String name, int age, int score, String address) {
this.id = id;
this.name = name;
this.age = age;
this.score = score;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String
toString() {
return "Student{" +
"id=" + id +
", name='" + name + ''' +
", age=" + age +
", score=" + score +
", address='" + address + ''' +
'}';
}
}



