如何创建成员内部类数组
在 Java 中,成员内部类(非静态内部类)的实例必须与外部类的实例相关联。因此,创建成员内部类数组需要以下步骤:
1. 声明成员内部类数组
数组的类型需使用外部类名限定内部类,语法为:
外部类名.内部类名[] 数组名 = new 外部类名.内部类名[长度];
示例:
public class Outer {class Inner { // 成员内部类void print() {System.out.println("内部类方法");}}public static void main(String[] args) {// 声明成员内部类数组Outer.Inner[] innerArray = new Outer.Inner[3];}
}
2. 初始化数组成员
必须通过外部类实例逐个初始化数组元素,语法为:
数组名[i] = 外部类实例.new 内部类构造器();
示例:
public class Outer {class Inner { /* ... */ }public static void main(String[] args) {Outer outer = new Outer(); // 创建外部类实例Outer.Inner[] innerArray = new Outer.Inner[3];// 初始化每个元素for (int i = 0; i < innerArray.length; i++) {innerArray[i] = outer.new Inner(); // ✅ 正确关联外部类实例}// 使用数组中的内部类对象innerArray[0].print(); // 输出:"内部类方法"}
}
3. 常见错误与解决方案
(1) 未关联外部类实例
Outer.Inner[] innerArray = new Outer.Inner[3];
innerArray[0] = new Inner(); // ❌ 错误:缺少外部类实例
解决方案:
必须通过外部类实例创建内部类对象:
innerArray[0] = outer.new Inner();
(2) 数组元素未初始化
Outer.Inner[] innerArray = new Outer.Inner[3];
innerArray[0].print(); // ❌ 错误:元素为null,导致NullPointerException
解决方案:
遍历数组并初始化所有元素。
4. 完整代码示例
public class Outer {private int id;public Outer(int id) {this.id = id;}// 成员内部类class Inner {void display() {System.out.println("外部类ID: " + id);}}public static void main(String[] args) {Outer outer = new Outer(100);Outer.Inner[] innerArray = new Outer.Inner[3];// 初始化数组for (int i = 0; i < innerArray.length; i++) {innerArray[i] = outer.new Inner();}// 调用方法for (Inner inner : innerArray) {inner.display(); // 输出:外部类ID: 100}}
}
总结
步骤 | 关键操作 | 注意事项 |
---|---|---|
声明数组 | Outer.Inner[] array = new Outer.Inner[n]; | 类型必须为外部类名.内部类名 |
初始化元素 | array[i] = outer.new Inner(); | 必须通过外部类实例创建内部类对象 |
使用元素 | 调用内部类方法(如array[i].method() ) | 确保元素已初始化,避免NullPointerException |
通过遵循上述步骤,即可正确创建和初始化成员内部类的数组。