数据创建语法
数据类型[] 变量名 = new 数据类型[长度];
用数组创建的对象与用类创建的对象的区别
对象的创建方式 | 对象中的元素个数 | 元素的数据类型 | 元素的访问方式 | 是否支持使用循环来遍历访问元素 | 元素是否有零值 | 对象存储的位置 |
---|---|---|---|---|---|---|
使用类创建 | 由成员变量的个数决定 | 可以在类中自定义 | 使用对象名.成员变量名 | 否 (元素没有索引号) | 有 | 堆区 |
使用数组创建 | 由数组的长度决定 | 所有元素是同一种类型 | 使用数组名[索引号] | 是 (因为每个元素有索引号, 从0开始) | 有 | 堆区 |
基本数据类型数组和引用类型数组
- 基本数据类型的数组有8个
- byte[]
- short[]
- int[]
- long[]
- float[]
- double[]
- boolean[]
- char[]
- 引用数据类型的数组 (使用类创建的数组)
- 使用类可以造对象, 一个对象可以存储一行数据
- 使用类可以造数组, 一个数组可以存储多个对象, 称为对象数组, 可以存储一个二维表结构的数据
**
一个普通Java对象 | 存储一行数据 |
---|---|
一个基本类型数组 | 存储一列数据 |
一个引用类型数组 | 存储一张二维表 |
数组使用常见错误
错误一: 访问未初始化/未开辟内存空间的数组
public class Demo02 {
public static void main(String[] args) {
int[] array;
// 数组未初始化之前不能访问数组中的元素
array[0] = 10;
}
}
错误二: 初始化数组未指定长度
public class Demo02 {
public static void main(String[] args) {
//int[] array = new int[]; // 错误: 初始化数组的时候必须指定数组的长度
// 初始化数组, 并分配长度为10的内存空间
int[] array = new int[10]; // 初始化数组的时候必须指定数组的长度
}
}
错误三: 数组下标越界
public class Demo02 {
public static void main(String[] args) {
// 初始化数组, 并分配长度为10的内存空间
int[] array = new int[10]; // 初始化数组的时候必须指定数组的长度
// array[-1] = 10;
// array[10] = 10;
}
}
创建数组的四种方式
public class Demo02 {
public static void main(String[] args) {
// 方式1:1. 在栈区声明数组变量 2. 在堆区开辟数组内存空间 (两行代码)
int[] array;
array = new int[10];
// 方式2:1. 在栈区声明数组变量 2. 在堆区开辟数组内存空间 (一行代码)
int[] array2 = new int[10];
// 方式3:1. 在栈区声明数组变量 2. 在堆区开辟数组内存空间 3. 在数组对象中的每个索引中存入数据
int[] array3 = new int[]{10,20,30,40,50};
// 方式4是方式3的简化版:1. 在栈区声明数组变量 2. 在堆区开辟数组内存空间 3. 在数组对象中的每个索引中存入数据
int[] array4 = {10,20,30,40,50};
}
}
遍历数组的三种方式
public class Demo03 {
public static void main(String[] args) {
int[] array = {10,20,30,40,50};
System.out.println("正序遍历");
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
System.out.println("倒序遍历");
for (int i = array.length - 1; i >= 0; i--) {
System.out.println(array[i]);
}
System.out.println("增强型for循环");
// 优点: 语法最简单 // 缺点: 循环中没有索引号
for (int e : array) {
System.out.println(e);
}
}
}