数据创建语法
数据类型[] 变量名 = 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);}}}
