创建一个数组,这个数组的每个元素都是一个字符串对象。

下面我将从最基础到更复杂的情况,分步讲解如何创建和使用它。
创建一个字符串数组(最常见)
这是最基础、最直接的理解,我们创建一个数组,用来存放多个字符串。
声明并初始化(推荐方式)
这种方式在声明的同时就为数组分配了内存空间并赋予了初始值。
// 1. 声明一个字符串数组,并直接初始化
String[] names = new String[]{"张三", "李四", "王五"};
// 2. 更简洁的初始化方式(Java 7+ 支持,类型可以推断)
String[] cities = {"北京", "上海", "广州", "深圳"};
// 3. 创建一个指定长度但未赋值的字符串数组(元素默认为 null)
String[] emptyArray = new String[5];
代码解释:

String[] names;:声明一个String类型的数组,注意,[]必须在String后面,或者像String names[];一样(但不推荐,前者更符合 Java 规范)。new String[]{...}:使用new关键字创建一个新的数组对象,并指定其初始元素。{"北京", "上海", ...}:这是字面量数组,Java 会自动将其转换为String[]类型。
先声明,后初始化
如果你需要在创建数组后,再动态地给元素赋值,可以分两步进行。
// 1. 声明一个字符串数组
String[] fruits;
// 2. 创建一个长度为 3 的数组对象,此时所有元素都为 null
fruits = new String[3];
// 3. 通过索引为每个元素赋值(索引从 0 开始)
fruits[0] = "苹果";
fruits[1] = "香蕉";
fruits[2] = "橙子";
// 访问数组元素
System.out.println("第一个水果是: " + fruits[0]); // 输出: 第一个水果是: 苹果
创建一个“对象数组”,其元素是字符串数组(嵌套数组)
现在我们来理解你问题中更深层含义:一个数组,它的每个元素又是一个字符串数组,这在 Java 中被称为“二维数组”或“数组的数组”。
声明并初始化
// 创建一个包含 3 个元素的数组,每个元素本身又是一个字符串数组
String[][] students = {
{"张三", "数学", "90"},
{"李四", "语文", "85"},
{"王五", "英语", "88"}
};
// 访问嵌套数组中的元素
// students[0] 是第一个字符串数组 {"张三", "数学", "90"}
// students[0][0] 是第一个字符串数组的第一个元素 "张三"
System.out.println("学生姓名: " + students[0][0]);
System.out.println("科目: " + students[0][1]);
System.out.println("分数: " + students[0][2]);
动态创建不规则嵌套数组
每个内部的字符串数组长度可以不同。
// 1. 声明一个外层数组,长度为 3
String[][] data = new String[3][];
// 2. 为每个外层数组元素单独创建不同长度的内层数组
data[0] = new String[]{"A", "B"}; // 第一个内层数组长度为 2
data[1] = new String[]{"C"}; // 第二个内层数组长度为 1
data[2] = new String[]{"D", "E", "F"}; // 第三个内层数组长度为 3
// 访问不规则数组
System.out.println("data[1][0] = " + data[1][0]); // 输出: data[1][0] = C
创建一个“对象数组”,其元素是“数组对象”(最抽象的理解)
这个理解更偏向于面向对象,我们可以创建一个类,这个类的实例就是一个“数组对象”,然后将这些对象存入另一个数组中。

虽然这不像“字符串数组”那么常用,但它能很好地解释“对象数组”的概念。
创建一个表示“数组”的类
// 定义一个名为 MyArray 的类
class MyArray {
private String[] internalArray; // 这个类内部持有一个真正的字符串数组
// 构造函数,用于初始化内部的字符串数组
public MyArray(String[] array) {
this.internalArray = array;
}
// 一个方法,用于打印内部数组的内容
public void printContent() {
System.out.print("[ ");
for (String item : internalArray) {
System.out.print(item + " ");
}
System.out.println("]");
}
}
创建 MyArray 对象数组
我们创建一个 MyArray 类的对象数组,每个对象都封装了一个字符串数组。
public class Main {
public static void main(String[] args) {
// 1. 创建几个字符串数组
String[] arr1 = {"Hello", "World"};
String[] arr2 = {"Java", "Programming"};
String[] arr3 = {"Object", "Array"};
// 2. 创建一个 MyArray 对象数组,每个元素都是一个 MyArray 对象
MyArray[] arrayOfMyArrays = new MyArray[3];
// 3. 创建 MyArray 对象并赋值给数组
arrayOfMyArrays[0] = new MyArray(arr1);
arrayOfMyArrays[1] = new MyArray(arr2);
arrayOfMyArrays[2] = new MyArray(arr3);
// 4. 遍历对象数组,并调用每个对象的方法
System.out.println("遍历 MyArray 对象数组:");
for (MyArray myArrayObj : arrayOfMyArrays) {
myArrayObj.printContent();
}
}
}
输出结果:
遍历 MyArray 对象数组:
[ Hello World ]
[ Java Programming ]
[ Object Array ]
| 层次 | 描述 | 示例代码 | 关键点 |
|---|---|---|---|
| 字符串数组 | 最常见,一个数组存放多个字符串。 | String[] names = {"A", "B"}; |
String[],一维结构。 |
| 嵌套字符串数组 | 一个数组,其每个元素又是一个字符串数组(二维数组)。 | String[][] data = {{"A"}, {"B", "C"}}; |
String[][],可以理解为表格或矩阵。 |
| 对象数组(封装数组) | 一个数组,其每个元素都是一个对象,而这些对象内部又封装了数组。 | MyArray[] objArray = new MyArray[3]; |
MyArray[],MyArray 是一个自定义类,体现了面向对象。 |
根据你的提问,层次一 和 层次二 是最可能对应你需求的答案,层次三则展示了更广义的“对象数组”概念,希望这个详细的解释能帮助你彻底理解!
